Компонент TextBox позволяет пользователю вводить и редактировать текст, который запоминается в свойстве Text. Можно вводить строки практически неограниченной длины (приблизительно до 32 000 символов), корректировать их, а также вводить защищенный текст (пароль) путем установки маски, отображаемой вместо вводимых символов (свойство PasswordChar). Для обеспечения возможности ввода нескольких строк устанавливают свойства Multiline, Scroll Bars и Wordwrap.
Доступ только для чтения устанавливается с помощью свойства Readonly. Элемент содержит методы очистки (Clear), выделения (Select), копирования в буфер (Сору), вставки из него (Paste) и др., а также реагирует на множество событий, основными из которых являются KeyPress и KeyDown.
Рассмотрим создание простого приложения, в котором использованы компоненты типа Label, Button и TextBox. Главное окно приложения показано на рис. 14.7.
Пользователь вводит число и нажимает клавишу Enter, после чего введенное значение сравнивается с числом, «задуманным» генератором случайных чисел. Если пользователь не угадал, выводится сообщение «Не угадали!». Каждое следующее сообщение для наглядности немного сдвигается вправо относительно предыдущего. После совпадения выводится итоговое сообщение, и фокус ввода передается на кнопку Еще раз (рис. 14.8). «Коэффициент невезучести» определяется как количество попыток, деленное на максимально возможное значение числа. Создание приложения начинается с проектирования его интерфейса. На форме располагаются метки, поля ввода и кнопка. В окне свойств их свойству Text задаются перечисленные в табл. 14.6 значения (в окне отображаются свойства выделенного элемента; элемент выделяется щелчком мыши).
|
|
Рис. 14.8. Окно приложения после ввода правильного ответа
Таблица 14.6. Значение свойства Text для компонентов приложения
Компонент Значение свойства Text
Form1 Диагностика кармы
label1 Введите число
label2, label3, textBox1 Пустое значение
button1 Еще раз
Поведение приложения задается в обработчиках событий. Число надо загадывать до того, как пользователь введет первый ответ, а затем после каждого щелчка на кнопке Еще раз. Следовательно, эти действия должны выполняться при загрузке формы (событие Load) и щелчке на кнопке (событие Click). Ответ пользователя анализируется при нажатии клавиши Enter после ввода числа (событие KeyPress элемента textBox1).
Вызов редактора программ выполняется двойным щелчком рядом с соответствующим событием элемента на вкладке Events окна свойств (см. рис. 14.5). Для хранения загаданного числа и ответа пользователя применяются поля i и к. В константе max хранится максимально возможное число. Переменная rnd представляет собой экземпляр генератора случайных чисел2. Сокращенный текст программы с комментариями приведен в листинге 14.3.
|
|
Листинг 14.3. Программа «Угадай число»
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace WindowsApplication1
{
public class Form1: Form
{
private Label label1;
private TextBox textBox1;
private Button button1;
private Label label2;
private Label label3;
private Container components = null;
public Form1() { /*... */ }
protected override void Dispose(bool disposing) {/*... */}
// Windows Form Designer generated code { /*... */ }
const int max = 10; // максимальное значение загадываемого числа
Random rnd; // экземпляр генератора случайных чисел
int i, k; // загадка и отгадка
static void Main() { /*... */ }
private void Form1_Load(object sender, EventArgs e)
{
rnd = new Random();
i = rnd.Next(max);
} // загадано число в диапазоне от 0 до max }
private void textBoxl_KeyPress(object sender, KeyPressEventArgs e)
{
int n;
if (e.KeyChar!= (char)13)
return; // если нажата не клавиша Enter, выйти
try // преобразование ввода пользователя в число
{
n = Convert.ToInt32(textBox1.Text);
}
catch
{
n = -1; // если введено не число, принять за неверный ответ
}
if (n!= i) // ============ пользователь не угадал
{
label2.Left += 5;
label2.Text = "Не угадали!";
textBox1.Clear();
k++; // увеличение счетчика попыток
button1.Visible = false;
}
else // ============== пользователь угадал
{
label2.Left = 32; // восстановить начальное положение метки
label2.Text = "Коэффициент невезучести";
double koef = 1.0 * k / max;
label3.Text = koef.ToString();
button1.Visible = true;
}
}
private void button1_C1ick(object sender, System.EventArgs e)
{
i = rnd.Next(max); // загадано число в диапазоне от 0 до max
к = 0; // обнуление количества попыток ответа
textBoxl.Clear(); // поле ввода очищено
textBox1.Focus(); // курсор установлен на поле ввода
label2.Text = ""; // метки очищены
label3.Text = "";
}
}
}