Здравствуйте!
Подскажите пожалуйста...
Мне вот надо было сделать диалоговое окно для ввода данных для бегущей строки.
Кроме этого, надо было, чтобы программа не давала вводить пустую строку и не давала вводить стандартное сообщение, которое пропадает при клике на TextBox("Кликните для ввода").
Всё работает хорошо, программа выполняет свою роль, но есть одна проблема:
Когда я вызываю второй и более раз, диалоговые сообщения отображаются более 1 раза(для примера, при 3-м вызове, 3 раза отображаются диалоги).
Вот код:
Кликните здесь для просмотра всего текста
C# |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
| using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ConsoleApplication
{
public partial class Form1 : Form
{
public Timer _time = new Timer();
public Button btn_1 = new Button();
public Button btn_2 = new Button();
public Label _left_text = new Label();
public Button _ok = new Button();
public Button _cancel = new Button();
public Button _random_callor = new Button();
public Form _input_box = new Form();
public TextBox _input_new_left_text = new TextBox();
void _on_click_btn_1(Object Senter, EventArgs e)
{
MessageBox.Show("Был вызван MessageBox из события при нажатии нa btn_1.click()", "ShowMessageBox");
_time.Enabled = true;
_left_text.Enabled = true;
_time.Start();
}
void _is_time_now(Object Senter, EventArgs e)
{
_left_text.Visible = true;
if (_left_text.Left + _left_text.Width < 0) _left_text.Left = this.Width;
else _left_text.Left -= 1;
}
void _inputbox_click_ok(Object Senter, EventArgs e)
{
if ((String.Compare("Кликните для ввода текста", _input_new_left_text.Text) != 0) && (String.IsNullOrWhiteSpace(_input_new_left_text.Text)!=true))
{
_left_text.Text = _input_new_left_text.Text;
MessageBox.Show("Изменения будут видны лишь тогда, когда будет включен таймер показа текста", "Внимание");
MessageBox.Show("Для его включения, нажмите на главную кнопку на форме, которая вызывает MessageBox", "Как увидеть результат");
}
else MessageBox.Show("Отсутствует текст!", "Ошибка занесения!");
_input_box.Hide();
}
void _inputbox_click_cancel(Object Senter, EventArgs e)
{
_input_box.Hide();
}
void clear_input_new_left_text(Object Senter, EventArgs e)
{
_input_new_left_text.Clear();
}
void _get_random_form_color(Object Senter, EventArgs e)
{
Random c = new Random();
this.BackColor = Color.FromArgb(c.Next(1, 255), c.Next(1, 255), c.Next(1, 255));
}
void _on_click_btn_2(Object Senter, EventArgs e)
{
_input_box = new Form();
_input_box.Controls.Add(_ok);
_input_box.Controls.Add(_cancel);
_input_box.BackColor = this.BackColor;
_input_box.Width = 400;
_input_box.Height = 200;
_input_box.StartPosition = FormStartPosition.CenterScreen;
_input_box.Enabled = true;
_input_box.Visible = true;
_input_box.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
_input_box.Text = "Изменение содержания бегущей строки";
_ok.Visible = true;
_cancel.Visible = true;
_ok.Enabled = true;
_cancel.Enabled = true;
_ok.Text = "Завершить ввод";
_cancel.Text = "Отменить изменения";
_ok.AutoSize = true;
_ok.Height = 25;
_cancel.AutoSize = true;
_cancel.Height = 25;
_ok.Left = 5;
_cancel.Left = _input_box.ClientSize.Width - _cancel.Width - 5;
_ok.Top = _input_box.ClientSize.Height - _ok.Height - 5;
_cancel.Top = _input_box.ClientSize.Height - _cancel.Height - 5;
_ok.Click += new EventHandler(_inputbox_click_ok);
_cancel.Click += new EventHandler(_inputbox_click_cancel);
_ok.Controls.Add(_input_new_left_text);
_ok.ForeColor = SystemColors.Window;
_cancel.ForeColor = SystemColors.Window;
_input_new_left_text.Enabled = true;
_input_new_left_text.Visible = true;
_input_new_left_text.Text = "Кликните для ввода текста";
_input_new_left_text.Width = _input_box.ClientSize.Width;
_input_new_left_text.Height = 25;
_input_new_left_text.Left = 0;
_input_new_left_text.Top = (_input_box.ClientSize.Height / 2) - (_input_new_left_text.Height / 2);
_input_box.Controls.Add(_input_new_left_text);
_input_new_left_text.Click += new EventHandler(clear_input_new_left_text);
}
public Form1()
{
InitializeComponent();
this.Width = 800;
this.Height = 400;
this.BackColor = System.Drawing.SystemColors.WindowText;
this.StartPosition = FormStartPosition.CenterScreen;
this.Controls.Add(btn_1);
btn_1.Enabled = true;
btn_1.Width = this.ClientSize.Width - 14;
btn_1.Height = this.ClientSize.Height / 14;
btn_1.Left = (this.ClientSize.Width / 2) - (btn_1.Width / 2);
btn_1.Top = (this.ClientSize.Height / 2) - (btn_1.Height / 2);
btn_1.Text = "Нажмите для вызова диалога окна";
btn_1.ForeColor = SystemColors.Window;
btn_1.Click += new EventHandler (this._on_click_btn_1);
_time.Enabled = false;
_time.Interval = 1;
_time.Tick += new EventHandler(this._is_time_now);
this.Controls.Add(_left_text);
_left_text.Visible = false;
_left_text.Enabled = false;
_left_text.Text = "Тестовый текст бегущей строки";
_left_text.ForeColor = SystemColors.Window;
_left_text.AutoSize = true;
_left_text.Left = this.Width; ;
_left_text.Top = this.ClientSize.Height - _left_text.Height - 5;
this.Controls.Add(btn_2);
btn_2.Enabled = true;
btn_2.Visible = true;
btn_2.Text = "Изменить бегущую строку";
btn_2.ForeColor = SystemColors.Window;
btn_2.AutoSize = true;
btn_2.Top = btn_1.Top - btn_2.Height - 5;
btn_2.Left = (this.ClientSize.Width / 2) - (btn_2.Width / 2);
btn_2.Click += new EventHandler(this._on_click_btn_2);
this.Controls.Add(_random_callor);
_random_callor.Enabled = true;
_random_callor.Visible = true;
_random_callor.Text = "Сгенерировать случайный цвет для формы";
_random_callor.AutoSize = true;
_random_callor.Height = 25;
_random_callor.Top = 0;
_random_callor.Left = (this.ClientSize.Width / 2) - (_random_callor.Width / 2);
_random_callor.ForeColor = SystemColors.Window;
_random_callor.Click += new EventHandler(_get_random_form_color);
}
}
} |
|
Как видно по коду-я не закрываю форму _input_box, а просто скрываю её(делаю её невидимой). Однако, если без скрытия формы(без _input_box.hide()), всё работает нормально.
Подскажите пожалуйста, в чём может быть проблема?
Добавлено через 2 минуты
Событие(функция, метод) _inputbox_click_ok и _inputbox_click_cancel
Первый метод - при нажатии на ОК
Второй метод - при нажатии на отмену
Добавлено через 13 минут
По ходу-нашёл решение...
Решение, которое я нашёл заключается в том, чтобы инициализировать компонент _input_box не при нажатии на кнопку его отображения и создания(как ранее планировалось), а в главной функции(т.е. построить вместе со всеми другими компонентами)...
И по умолчанию, поставить _input_box.hide().
Вот код:
Кликните здесь для просмотра всего текста
C# |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
| using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace _Visual_C_Sharp__Основы
{
public partial class Form1 : Form
{
public Timer _time = new Timer();
public Button btn_1 = new Button();
public Button btn_2 = new Button();
public Label _left_text = new Label();
public Button _ok = new Button();
public Button _cancel = new Button();
public Button _random_callor = new Button();
public Form _input_box = new Form();
public TextBox _input_new_left_text = new TextBox();
void _on_click_btn_1(Object Senter, EventArgs e)
{
MessageBox.Show("Был вызван MessageBox из события при нажатии нa btn_1.click()", "ShowMessageBox");
_time.Enabled = true;
_left_text.Enabled = true;
_time.Start();
}
void _is_time_now(Object Senter, EventArgs e)
{
_left_text.Visible = true;
if (_left_text.Left + _left_text.Width < 0) _left_text.Left = this.Width;
else _left_text.Left -= 1;
}
void _inputbox_click_ok(Object Senter, EventArgs e)
{
if ((String.Compare("Кликните для ввода текста", _input_new_left_text.Text) != 0) && (String.IsNullOrWhiteSpace(_input_new_left_text.Text)!=true))
{
_left_text.Text = _input_new_left_text.Text;
MessageBox.Show("Изменения будут видны лишь тогда, когда будет включен таймер показа текста", "Внимание");
MessageBox.Show("Для его включения, нажмите на главную кнопку на форме, которая вызывает MessageBox", "Как увидеть результат");
}
else MessageBox.Show("Отсутствует текст!", "Ошибка занесения!");
_input_box.Hide();
}
void _inputbox_click_cancel(Object Senter, EventArgs e)
{
_input_box.Hide();
}
void clear_input_new_left_text(Object Senter, EventArgs e)
{
_input_new_left_text.Clear();
}
void _get_random_form_color(Object Senter, EventArgs e)
{
Random c = new Random();
this.BackColor = Color.FromArgb(c.Next(1, 255), c.Next(1, 255), c.Next(1, 255));
}
void _on_click_btn_2(Object Senter, EventArgs e)
{
_input_box.Show();
}
public Form1()
{
InitializeComponent();
this.Width = 800;
this.Height = 400;
this.Text = "Visual C# - Основы работы с визуальным C#";
this.BackColor = System.Drawing.SystemColors.WindowText;
this.StartPosition = FormStartPosition.CenterScreen;
this.Controls.Add(btn_1);
btn_1.Enabled = true;
btn_1.Width = this.ClientSize.Width - 14;
btn_1.Height = this.ClientSize.Height / 14;
btn_1.Left = (this.ClientSize.Width / 2) - (btn_1.Width / 2);
btn_1.Top = (this.ClientSize.Height / 2) - (btn_1.Height / 2);
btn_1.Text = "Нажмите для вызова диалога окна";
btn_1.ForeColor = SystemColors.Window;
btn_1.Click += new EventHandler (this._on_click_btn_1);
_time.Enabled = false;
_time.Interval = 1;
_time.Tick += new EventHandler(this._is_time_now);
this.Controls.Add(_left_text);
_left_text.Visible = false;
_left_text.Enabled = false;
_left_text.Text = "Тестовый текст бегущей строки";
_left_text.ForeColor = SystemColors.Window;
_left_text.AutoSize = true;
_left_text.Left = this.Width; ;
_left_text.Top = this.ClientSize.Height - _left_text.Height - 5;
this.Controls.Add(btn_2);
btn_2.Enabled = true;
btn_2.Visible = true;
btn_2.Text = "Изменить бегующую строку";
btn_2.ForeColor = SystemColors.Window;
btn_2.AutoSize = true;
btn_2.Top = btn_1.Top - btn_2.Height - 5;
btn_2.Left = (this.ClientSize.Width / 2) - (btn_2.Width / 2);
btn_2.Click += new EventHandler(this._on_click_btn_2);
this.Controls.Add(_random_callor);
_random_callor.Enabled = true;
_random_callor.Visible = true;
_random_callor.Text = "Сгенерировать случайный цвет для формы";
_random_callor.AutoSize = true;
_random_callor.Height = 25;
_random_callor.Top = 0;
_random_callor.Left = (this.ClientSize.Width / 2) - (_random_callor.Width / 2);
_random_callor.ForeColor = SystemColors.Window;
_random_callor.Click += new EventHandler(_get_random_form_color);
_input_box.Controls.Add(_cancel);
_input_box.BackColor = this.BackColor;
_input_box.Width = 400;
_input_box.Height = 200;
_input_box.StartPosition = FormStartPosition.CenterScreen;
_input_box.Enabled = true;
_input_box.Visible = true;
_input_box.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
_input_box.Text = "Изменение содержания бегущей строки";
_input_box.Controls.Add(_ok);
_ok.Visible = true;
_cancel.Visible = true;
_ok.Enabled = true;
_cancel.Enabled = true;
_ok.Text = "Завершить ввод";
_cancel.Text = "Отменить изменения";
_ok.AutoSize = true;
_ok.Height = 25;
_cancel.AutoSize = true;
_cancel.Height = 25;
_ok.Left = 5;
_cancel.Left = _input_box.ClientSize.Width - _cancel.Width - 5;
_ok.Top = _input_box.ClientSize.Height - _ok.Height - 5;
_cancel.Top = _input_box.ClientSize.Height - _cancel.Height - 5;
_ok.Click += new EventHandler(_inputbox_click_ok);
_cancel.Click += new EventHandler(_inputbox_click_cancel);
_ok.Controls.Add(_input_new_left_text);
_ok.ForeColor = SystemColors.Window;
_cancel.ForeColor = SystemColors.Window;
_input_new_left_text.Enabled = true;
_input_new_left_text.Visible = true;
_input_new_left_text.Text = "Кликните для ввода текста";
_input_new_left_text.Width = _input_box.ClientSize.Width;
_input_new_left_text.Height = 25;
_input_new_left_text.Left = 0;
_input_new_left_text.Top = (_input_box.ClientSize.Height / 2) - (_input_new_left_text.Height / 2);
_input_box.Controls.Add(_input_new_left_text);
_input_new_left_text.Click += new EventHandler(clear_input_new_left_text);
_input_box.Hide();
}
}
} |
|