Библиотека книг по компьютерным технологиям
⇒ ⇒ Разработка Windows-приложений на Microsoft Visual Basic .NET и Microsoft Visual C# .NET. Учебный курс MCAD/MCSD
⇒ ⇒ ⇒ Глава 2. Создание пользовательского интерфейса
⇒ ⇒ ⇒ ⇒ Занятие 5. Проверка данных, вводимых пользователем

Читать далее: Проверка на уровне формы

Работа с фокусом ввода

Объект, обладающий фокусом, способен получать пользовательский ввод, осуществляемый мышью или через клавиатуру. На форме может быть несколько элементов управления, но в каждый момент времени фокус ввода только у одного из них. Элемент управления, обладающий фокусом, всегда находится на активной форме приложения.

У каждого элемента управления есть метод Focus, который передает фокус ввода вызвавшему его элементу управления. Метод Focus возвращает булево значение, свидетельствующее об успешной или неудачной передаче фокуса. Деактивированные или невидимые элементы управления не получают фокус ввода. Определить, способен ли данный элемент управления получить фокус ввода, позволяет его свойство CanFocus: если оно возвращает true, элемент управления может получить фокус, а если false — нет.

Visual Basic .NET

' Проверить, может ли TextBox1 получить фокус,
' и, если да, передать ему фокус.
If TextBox1.CanFocus = True Then
  TextBox1.Focus()
End If

Visual C#

// Проверить, может ли TextBox1 получить фокус,
// и, если да, передать ему фокус.
if(textBox1.CanFocus == true)
  textBox1.Focus();

События, связанные с передачей фокуса, генерируются в следующем порядке:

  1. Enter
  2. GotFocus
  3. Leave
  4. Validating
  5. Validated
  6. LostFocus

События Enter и Leave генерируются, когда фокус переходит к элементу управления (но еще не получен им) и покидает его. События GotFocus и LostFocus генерируются при получении и потере фокуса элементом управления. В принципе, эти события можно применять для проверки вводимых значений на уровне поля, однако события Validating и Validated лучше подходят для этой цели.

События Validating и Validated

Проще всего проверить вводимые данные при помощи события Validating, генерируемого перед потерей фокуса элементом управления. Это событие генерируется, только если у элемента управления, который получит фокус следующим, свойство CausesValidation установлено в true. Поэтому, если значение элемента управления предполагается проверять при помощи события Validating, для элемента управления, который получит фокус следующим, свойство CausesValidation следует установить в true. Кроме того, использование события Validating требует, чтобы свойство CausesValidation у проверяемого элемента управления было установлено в true. У всех элементов управления, созданных во время разработки, свойство CausesValidation установлено в true по умолчанию, обычно исключение составляет лишь кнопка Help.

Событие Validating позволяет выполнять довольно сложную проверку значений элементов управления. Обработчик этого события способен, например, проверять соответствие введенного значения некоторому весьма специфическому формату или запрещать передачу фокуса другому элементу управления, пока пользователь не введет какое-либо значение.

Событие Validating включает экземпляр CancelEventArgs — класса с единственным свойством Cancel. Если введенное значение не отвечает заданным параметрам, проверив свойство Cancel в обработчике события Validating, можно отменить дальнейшую обработку этого события и вернуть фокус исходному элементу управления.

Событие Validated генерируется после успешной проверки значения элемента управления и позволяет выполнить некоторые действия в зависимости от результатов проверки.

Ниже показан пример обработчика события Validating, который не разрешает передать фокус следующему элементу управления, пока пользователь не введет значение в поле TextBox1.

Visual Basic .NET

Private Sub TextBox1_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating
  ' Проверить значение TextBox1
  If TextBox1.Text = "" Then
    ' Если поле TextBox1 пусто, вернуть ему фокус
    e.Cancel = True
  End If
End Sub

Visual C#

private void textBox1_Validating(object sender, System.ComponentModel.CancelEventArgs e)
{
  // Проверить значение textBox1
  if(textBox1.Text == "")
    // Если поле textBox1 пусто, вернуть ему фокус
    e.Cancel = true;
}

Применение события Validating для проверки текстового поля

  1. Поместите на форму текстовое поле;
  2. Создайте для него обработчик события Validating, устанавливающий свойство e.Cancel в true, чтобы прервать проверку и вернуть фокус текстовому полю.
  3. Для всех элементов управления, которые не должны генерировать событие Validating, установите свойство CausesValidation в false.
Google
 
Рейтинг@Mail.ru
Сайт управляется системой uCoz