Поделиться через


Общие сведения о проверке входных данных пользователей

Когда пользователи вводят данные в ваше приложение, вы можете проверить их корректность перед использованием приложением. Может потребоваться, чтобы определенные текстовые поля не были нулевой длиной, что поле отформатировано как номер телефона или что строка не содержит недопустимых символов. Windows Forms предоставляет несколько способов проверки входных данных в приложении.

Элемент управления MaskedTextBox

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

Язык маскирования, используемый MaskedTextBox, является гибким. Он позволяет указать обязательные символы, необязательные символы, литеральные символы, такие как дефисы и скобки, символы валюты и разделители дат. Элемент управления также хорошо работает при привязке к источнику данных. Событие Format привязки данных можно использовать для переформатирования входящих данных в соответствии с маской, а событие Parse можно использовать для переформатирования исходящих данных в соответствии с спецификациями поля данных.

Проверка на основе событий

Если требуется полный программный контроль над проверкой или требуется сложные проверки, следует использовать события проверки, встроенные в большинство элементов управления Windows Forms. Каждый элемент управления, принимаюющий входные данные пользователя в свободной форме, имеет Validating событие, которое возникает всякий раз, когда элемент управления требует проверки данных. В коде Validating обработчика событий можно проверить входные данные пользователей несколькими способами. Например, если у вас есть текстовое поле, которое должно содержать почтовый индекс, можно выполнить проверку следующим образом:

  • Если почтовый индекс должен принадлежать определенной группе zip-кодов, можно выполнить сравнение строк для входных данных, чтобы проверить данные, введенные пользователем. Например, если почтовый индекс должен находиться в наборе {10001, 10002, 10003}, можно использовать сравнение строк для проверки данных.

  • Если почтовый индекс должен находиться в определенной форме, можно использовать регулярные выражения для проверки данных, введенных пользователем. Например, чтобы проверить форму ##### или #####-####, можно использовать регулярное выражение ^(\d{5})(-\d{4})?$. Чтобы проверить форму A#A #A#, можно использовать регулярное выражение [A-Z]\d[A-Z] \d[A-Z]\d. Дополнительные сведения о регулярных выражениях см. в разделе регулярные выражения .NET и примеры регулярных выражений.

  • Если почтовый индекс должен быть допустимым почтовым индексом США, можно вызвать веб-службу ZIP-кода, чтобы проверить данные, введенные пользователем.

Событию Validating предоставляется объект типа CancelEventArgs. Если вы определите, что данные элемента управления недопустимы, отмените событие Validating, установив свойство Cancel этого объекта в значение true. Если свойство не задано Cancel , Windows Forms предполагает, что проверка выполнена успешно для этого элемента управления и вызывает Validated событие.

Пример кода, который проверяет адрес электронной почты в TextBox, можно найти в справочнике по событиям Validating.

Элементы управления с привязкой к данным, управляемые событиями

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

При использовании привязки данных данные в элементе управления синхронизируются с источником данных во время выполнения события Validating. Если отменить событие Validating, данные не будут синхронизированы с источником данных.

Это важно

Если после события Validating выполняется настраиваемая проверка, она не повлияет на привязку данных. Например, если в коде события Validated вы попытаетесь отменить привязку данных, она всё равно будет выполнена. В этом случае, чтобы выполнить проверку в событии Validated, измените свойство Binding.DataSourceUpdateMode элемента управления с DataSourceUpdateMode.OnValidation на DataSourceUpdateMode.Neverи добавьте your-control.DataBindings["field-name"].WriteValue() в код проверки.

Неявная и явная проверка

Так когда данные элемента управления проверяются? Это зависит от вас, разработчик. Вы можете использовать неявную или явную проверку в зависимости от потребностей приложения.

Неявная проверка

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

Если вы хотите использовать неявную проверку для элемента управления, необходимо задать для этого свойства AutoValidate элемента управления значение EnablePreventFocusChange или EnableAllowFocusChange. Если отменить событие Validating, поведение элемента управления определяется тем, какое значение вы назначили AutoValidate. Если вы назначили EnablePreventFocusChange, отмена события препятствует возникновению Validated события. Фокус ввода остается на текущем элементе управления, пока пользователь не изменит данные в допустимый формат. Если вы назначили EnableAllowFocusChange, событие Validated не произойдет при отмене события, но фокус по-прежнему изменится на следующий элемент управления.

Назначение Disable свойству AutoValidate полностью предотвращает неявную проверку. Чтобы проверить элементы управления, используйте явную проверку.

Явная проверка

Явный подход проверки проверяет данные одновременно. Вы можете проверить данные в ответ на действие пользователя, например, нажав на кнопку "Сохранить" или на ссылку "Далее". При возникновении действия пользователя можно активировать явную проверку одним из следующих способов:

  • Вызовите Validate для проверки последнего элемента управления, который потерял фокус.
  • Вызовите ValidateChildren для проверки всех дочерних элементов управления в форме или элементе управления контейнерами.
  • Вызовите пользовательский метод для проверки данных в элементах управления вручную.

Поведение неявной проверки по умолчанию для элементов управления

Различные элементы управления Windows Forms имеют разные значения по умолчанию для их свойства AutoValidate. В следующей таблице показаны наиболее распространенные элементы управления и их значения по умолчанию.

Контроль Поведение проверки по умолчанию
ContainerControl Inherit
Form EnableAllowFocusChange
PropertyGrid Свойство не отображается в Visual Studio
ToolStripContainer Свойство не отображается в Visual Studio
SplitContainer Inherit
UserControl EnableAllowFocusChange

Закрытие формы и переопределение валидации

Если элемент управления сохраняет фокус, так как содержащиеся в нем данные недопустимы, невозможно закрыть родительскую форму одним из обычных способов:

  • Нажав кнопку Закрыть.
  • Выбрав меню System>Закрыть.
  • Путем программного вызова метода Close.

Однако в некоторых случаях может потребоваться разрешить пользователю закрыть форму независимо от того, допустимы ли значения в элементах управления. Можно переопределить проверку и закрыть форму, которая по-прежнему содержит недопустимые данные, создав обработчик для события FormClosing формы. В событии задайте для свойства Cancel значение false. Это заставляет форму закрыть. Дополнительные сведения и пример см. в Form.FormClosing.

Замечание

Если вы принудительно заставить форму закрыть таким образом, несохраненные данные будут потеряны. Кроме того, модальные формы не проверяют содержимое элементов управления при закрытии. Вы по-прежнему можете использовать проверку элемента управления для блокировки фокуса на элемент управления, но вам не нужно беспокоиться о поведении, связанном с закрытием формы.

См. также