Перейти к содержанию

Разработка на Windows Forms/Добавляем интерактивности

Материал из Викиверситета


Добавляем интерактивности в проект

<< Предыдущий урок

Итак, теперь мы модем добавить интерактивность: давайте сделаем текстовое поле, в котором пользователь будет вводить свое имя, а надпись внизу динамически будет изменяться, приветствуя пользователя по имени.

Давайте из панели элементов перетащим на форму элементы TextBox и Label (две штуки Label). Разместим их так: элемент TextBox (поле ввода) разместим между Label (надписи). Нажмем на первую надпись (та, которая выше), и найдем ее свойство Text - это текст, который она отображает. Изменим его на "Введите свое имя". Для второй надписи просто уберем текст.

Теперь мы 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 (есть другие символы) то мы отображаем исходное имя. А если ноль, то отображаем "заглушку". Проверяем:

Оно заработало! Итак, мы сделали уже свое первое приложение. Могу вас поздравить! Ждем в следующем уроке!

Домашнее задание

[править]
  1. Сделайте приложение, в котором у пользователя запрашивается имя пользователя и пароль. Создайте словарь формата пользователь-пароль, и если данные совпадают, отображайте, что данные верные. Иначе отображайте, что вход невозможен.
  2. Реализуйте игру, где пользователю надо ввести решение какого-либо уравнения. В зависимости от ответа выводите соответствующую надпись.

(Усложнение: можете сделать так, чтобы пользователь вводил два ответа (решения уравнения; например, вы укажите квадратное уравнение) через какой-то знак, например, пробел, и проверять, что значения именно два и они верные)