Разработка на Windows Forms/Добавляем интерактивности
| Это черновой вариант статьи. Вы можете помочь проекту, исправив и дополнив её. |
Итак, теперь мы модем добавить интерактивность: давайте сделаем текстовое поле, в котором пользователь будет вводить свое имя, а надпись внизу динамически будет изменяться, приветствуя пользователя по имени.
Давайте из панели элементов перетащим на форму элементы TextBox и Label (две штуки Label). Разместим их так: элемент TextBox (поле ввода) разместим между Label (надписи). Нажмем на первую надпись (та, которая выше), и найдем ее свойство Text - это текст, который она отображает. Изменим его на "Введите свое имя". Для второй надписи просто уберем текст.
-
Размещенные элементы на форме
-
Свойство Text для label1
-
Свойство Text для label2
-
Готовая форма после перетаскивания элементов и изменения свойств надписей
Теперь мы 2 раза нажимаем по нашему полю, и нас перенаправляет на код нашей формы, а именно в метод textBox1_TextChanged. Тут мы прописываем, что будет происходить:
private void textBox1_TextChanged(object sender, EventArgs e)
{
label2.Text = "Привет, " + textBox1.Text;
}
То есть мы заменяем текст во второй надписи на "Привет, " плюс текст из поля ввода. Давайте соберем наш проект и проверим!
Как видите, когда мы вводим текст, нижняя надпись изменяется в соответствии, что мы ввели. А что будет, если мы введем пустое имя? Надпись будет писать "Привет, " и все. Давайте сделаем проверку на пустое имя - если имя будет пустым, то текст надписи будет "У вас нет имени?"
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (textBox1.Text.Length > 0) label2.Text = "Привет, " + textBox1.Text;
else label2.Text = "У вас нет имени?";
}
Давайте проверять! Введем пустое имя (именно введем, так как изначально у нас пустое поле ввода и пустая надпись). И нижняя надпись показала "У вас нет имени?".
А давайте мы сделаем так: если строка после удаления некоторых символов будет пустая (символы из строки ,<.>/?[{]}!@'"#№$;:%), то тоже будем это отображать. Вот код:
private void textBox1_TextChanged(object sender, EventArgs e)
{
string symbs = " ,<.>/?[{]}!@'\"#№$;:%";
string modified = textBox1.Text;
foreach (char c in modified)
{
if (symbs.Contains(c.ToString())) modified = modified.Replace(c.ToString(), "");
}
if (modified.Length > 0) label2.Text = "Привет, " + textBox1.Text;
else label2.Text = "У вас нет имени?";
}
Зачем нам дополнительная переменная? Мы же можем изменять сразу textBox1.text? Нет, не можем. Ведь он отображается пользователю внутри поля ввода! Мы проверяем строку, которую очистили от символов, на длину, и если ее длина больше 0 (есть другие символы) то мы отображаем исходное имя. А если ноль, то отображаем "заглушку". Проверяем:
Оно заработало! Итак, мы сделали уже свое первое приложение. Могу вас поздравить! Ждем в следующем уроке!
Домашнее задание
[править]- Сделайте приложение, в котором у пользователя запрашивается имя пользователя и пароль. Создайте словарь формата пользователь-пароль, и если данные совпадают, отображайте, что данные верные. Иначе отображайте, что вход невозможен.
- Реализуйте игру, где пользователю надо ввести решение какого-либо уравнения. В зависимости от ответа выводите соответствующую надпись.
(Усложнение: можете сделать так, чтобы пользователь вводил два ответа (решения уравнения; например, вы укажите квадратное уравнение) через какой-то знак, например, пробел, и проверять, что значения именно два и они верные)