* При перепечатке материалов ссылка на www.SeoLiga.ru обязательна!
Работа с фокусом ввода
7 февраля 2009
Объект, обладающий фокусом, способен получать пользовательский ввод, осуще- ствляемый мышью или через клавиатуру. На форме может быть несколько элемен- тов управления, но в каждый момент времени фокус ввода только у одного из них. Элемент управления, обладающий фокусом, всегда находится на активной форме приложения.
У каждого элемента управления есть метод Focus, который передает фокус ввода вызвавшему его элементу управления. Метод Focus возвращает булево значение, свидетельствующее об успешной или неудачной передаче фокуса. Деактивлрован- ные или невидимые элементы управления не получают фокус ввода. Определить, способен ли данный элемент управления получить фокус ввода, позволяет его свой- ство CanFocus: если оно возвращает true, элемент управления может получить фо- кус, а если false — нет. Visual Basic .NET Проверить, может ли TextBoxf получить фокус, и, если да, передать ему фокус. If TextBoxl.CanFocus = True Then TextBoxl.Focus() End If Visual C# // Проверить, может ли TextBoxl получить фокус, // и, если да, передать ему фокус. if (textBoxl.CanFocus == true) textBoxl.Focus(); События, связанные с передачей фокуса, генерируются в следующем порядке: 1. Enter 1. Got Focus 3. Leave 4. Validating 5. Validated 6. LostFocus События Enters Leave генерируются, когда фокус переходит к элементу управ- ления (но еще не получен им) и покидает его. События GotFocus и LostFocus генери- руются при получении и потере фокуса элементом управления. В принципе, эти события можно применять для проверки вводимых значений на уровне поля, одна- ко события Validating и Validated лучше подходят для этой цели. События Validating и Validated Проще всего проверить вводимые данные при помощи события Validating, генери- руемого перед потерей фокуса элементом управления. Это событие генерируется, только если у элемента управления, который получит фокус следующим, свойство Causes Validation установлено в true. Поэтому, если значение элемента управления предполагается проверять при помощи события Validating, для элемента управле- ния, который получит фокус следующим, свойство CausesValidation следует устано- вить в true. Кроме того, использование события Validating требует, чтобы свойство CausesValidation у проверяемого элемента управления было установлено в true. У всех элементов управления, созданных во время разработки, свойство CausesValidation установлено в trite по умолчанию, обычно исключение составляет лишь кноп- ка Help. Событие Validating позволяет выполнять довольно сложную проверку значений элементов управления. Обработчик этого события способен, например, проверять соответствие введенного значения некоторому весьма специфическому формату или запрещать передачу фокуса другому элементу управления, пока пользователь не введет какое-либо значение. Событие Validating включает экземпляр CancelEventArgs — класса с единствен- ным свойством Cancel. Если введенное значение не отвечает заданным параметрам, проверив свойство Cancel в обработчике события Validating, можно отменить даль- нейшую обработку этого события и вернуть фокус исходному элементу управления. Событие Validated генерируется после успешной проверки значения элемента управления и позволяет выполнить некоторые действия в зависимости от результа- тов проверки. Ниже показан пример обработчика события Validating, который не разрешает пе- редать фокус следующему элементу управления, пока пользователь не введет зна- чение в поле TextBoxl. Visual Basic .NET Private Sub TextBox1_Validating(ByVal sender As Object, ByVal e As System. ComponentModel. CancelEventArgs) Handles TextBoxl. Validating 1 Проверить значение TextBoxl If TextBoxl. Text = "" Then Если поле TextBoxl пусто, вернуть ему фокус e. Cancel - True End If End Sub Visual C# private void textBox1_Validating(object sender, System. ComponentModel. CancelEventArgs e) { // Проверить значение TextBoxl if (textBoxt.Text == "") // Если поле TextBoxl пусто, зернуть ему фокус e. Cancel = true; > Применение события Validating для проверки текстового поля 1. Поместите на форму текстовое поле. 2. Создайте для него обработчик события Validating, устанавливающий свойство e. Cancel в true, чтобы прервать проверку и вернуть фокус текстовому полю. 3. Для всех элементов управления, которые не должны генерировать событие Validating, установите свойство Causes Validation в false.