Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР9.doc
Скачиваний:
24
Добавлен:
21.09.2019
Размер:
4.54 Mб
Скачать

Поле ввода TextBox

Компонент TextBox позволяет пользователю вводить и редактировать текст, который запоминается в свойстве Text. Можно вводить строки практически неограниченной длины (приблизительно до 32 000 символов), корректировать их, а также вводить защищенный текст (пароль) путем установки маски, отображаемой вместо вводимых символов (свойство PasswordChar). Для обеспечения возможности ввода нескольких строк устанавливают свойства Multiline, ScrollBars и WordWrap. Доступ только для чтения устанавливается с помощью свойства ReadOnly.

Элемент содержит методы очистки (Clear), выделения (Select), копирования в буфер (Copy), вставки из него (Paste) и другие, а также реагирует на множество событий, основными из которых являются KeyPress и KeyDown.

Рассмотрим создание простого приложения, в котором использованы компоненты типа Label, Button и TextBox. Главное окно приложения показано на рис. 9.7.

Рис. 9.7 - Окно приложения «Диагностика кармы»

Пользователь вводит число и нажимает клавишу Enter, после чего введенное значение сравнивается с числом, «задуманным» генератором случайных чисел. Если пользователь не угадал, выводится сообщение «Не угадали!». Каждое следующее сообщение для наглядности немного сдвигается вправо относительно предыдущего. После совпадения выводится итоговое сообщение, и фокус ввода передается на кнопку Еще раз (рис. 9.8). «Коэффициент невезучести» определяется как количество попыток, деленное на максимально возможное значение числа.

Рис. 9.8 - Окно приложения после ввода правильного ответа

Создание приложения начинается с проектирования его интерфейса. На форме располагаются метки, поля ввода и кнопка. В окне свойств их свойству Text задаются перечисленные в табл. 9.6 значения (в окне отображаются свойства выделенного элемента; элемент выделяется щелчком мыши).

Таблица 9.6 - Значение свойства Text для компонентов приложения

Компонент

Значение свойства Text

Form1

Диагностика кармы

label1

Введите число

label2, label3, textBox1

Пустое значение

button1

Еще раз

Поведение приложения задается в обработчиках событий. Число надо загадывать до того, как пользователь введет первый ответ, а затем после каждого щелчка на кнопке Еще раз. Следовательно, эти действия должны выполняться при загрузке формы (событие Load) и щелчке на кнопке (событие Click). Ответ пользователя анализируется при нажатии клавиши Enter после ввода числа (событие KeyPress элемента textBox1).

Вызов редактора программ выполняется двойным щелчком рядом с соответствующим событием элемента на вкладке Events окна свойств (см. рис. 9.5). Для хранения загаданного числа и ответа пользователя применяются поля i и k. В константе max хранится максимально возможное число. Переменная rnd представляет собой экземпляр генератора случайных чисел.

Сокращенный текст программы с комментариями приведен в листинге 9.3.

Листинг 9.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 textBox1_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_Click(object sender, System.EventArgs e)

{

i = rnd.Next(max); // загадано число в диапазоне от 0 до max

k = 0; // обнуление количества попыток ответа

textBox1.Clear(); // поле ввода очищено

textBox1.Focus(); // курсор установлен на поле ввода

label2.Text = ""; // метки очищены

label3.Text = "";

}

}

}