User Rating: 0 / 5

Star InactiveStar InactiveStar InactiveStar InactiveStar Inactive
 

Пррдолжение, начало смотри здесь.

Немного усовершенствуем имеющийся функционал.

Если вы пробовали код из предыдущего урока, то возможно заметили некоторые неудобства, которые напрягают. Когда мы нажимаем кнопку "Старт", нам надо кликнуть самим в текстовое поле ввода ответа. А хотелось бы просто сходу вводить ответ. Это сделать несложно. Нужно в

обработчике события button1_Click к текстовому полю применить метод Select : 


textBox1.Select();

Это примерно тотже метод, что и Focus(), но Microsoft рекомендует использовать все же метод Select. А Focus использовать для разработки собственных элементов управления.

Метод Select позволяет выделить часть текста, если в качестве параметров указать номер первого выделяемого символа и количество выделяемых символов. Например, чтобы выделить первый символ надо задать textBox1.Select(1,1);


Давайте также спрячем кнопку Старт после ее использования, чтобы пользователь не отвлекался на нее: 

button1.Visible = false; 

А теперь запустите программу и попробуйте в текстовое поле ввести не цифры, а буквы. Компилятор выбросит исключение "Входная строка имела неверный формат." , что приведет к аварийному завершению программы. Как избежать такой ситуации? Есть несколько способов.

Можно вместо текстового поля использовать элемент управления numericUpDown. Вы просто не сможете в него ничего ввести кроме цифр. А когда будете вводить буквы, их ввод будет игнорироваться.

Можно попытаться перехватить ввод нецифровых символов в обработчике события измения текстового поля textBox1_TextChanged. 

Можно использовать механизм обработки исключений    try -  catch. Давайте напишем простейший обработчик ошибки для процедуры обработки нажатия клавишы клавиатуры, написанной в первом практическом занятии.

Простейший обработчик ошибки: 

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)

{

try

{

//если нажата ентер

if (e.KeyChar == (char)Keys.Enter)

{//проверяем правильность решения

if (a + b == Convert.ToInt32(textBox1.Text))

{ //если правильный ответ

//очищаем текстовое поле и устанавливаем на него курсор

textBox1.Text = "";

textBox1.Focus();

button1_Click(sender, e);

 

}

else

{

MessageBox.Show("Не правильно"); 

}

}

}//end try

 

catch

{

MessageBox.Show("Разрешено вводить только цифры");

textBox1.SelectAll();

}

 

}

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

Не вдававаясь в подробности механизма обработки исключений, скажу, что в блок try{} необходимо включать код, который может вызвать ошибку. А в блок catch{} – обработчик ошибки.

В нашем случае, если в текстовом поле окажется текст, который нельзя интерпретировать как число, программа не рухнет, а выведет сообщение «Разрешено вводить только цифры».


Еще одно небольшое усовершенствование. Попробуйте ввести заведомо неверный ответ. После закрытия сообщения «Не правильно», курсор будет находиться после последнего символа текстового поля. Я предлагаю, выделить все текстовое поле, чтобы не надо было использовать клавишу Backspace, а сразу вводить верный результат. Как известно, все выделение заменится первым введенным символом. Для этого можно использовать метод SelectAll:

textBox1.SelectAll();

В качестве задания, подумайте сами, куда вставить этот оператор.


Подведем итоги


·           Мы узнали о методах Select и SelectAll;

·           Научились делать простейшие обработчики ошибок;

·           Узнали о назначении элемента управления numericUpDown


Comments   

#3 Gal_Sergey 2012-10-27 16:10
Есть в зачаточном состоянии. Нет никаких настроек и менюшек. Просто выводит примеры на сложение в течении некоторого времени и подсчитывает успехи. Просто мало заинтересовавши хся, и пока не продвигается. Регистрируйтесь в подписке, тогда будет продолжение.
Quote
#2 EduStudio 2012-10-27 13:37
Уже есть готовый тут. Устный счет.
Quote
#1 EduStudio 2012-10-27 13:36
Уже есть готовый .
Quote

Add comment


Security code
Refresh