Проверка введенных пользователем данных в Windows Forms
Когда пользователи вводят данные в приложение, может потребоваться убедитесь, что данные действителен, прежде чем приложение использует их. Вам может потребоваться, что некоторые текстовые поля не быть нулевой длины, что были отформатированы как номер телефона или другой тип данных, или что строка содержит небезопасных знаков, которые могут использоваться для нарушения безопасности базы данных. Windows Forms предоставляет несколько способов для проверки входных данных в приложении.
Проверки в элементе управления MaskedTextBox
Если требуется, чтобы пользователи должны вводить данные в определенном формате, например номер телефона или номер части, то это можно сделать быстро и с минимальным использованием кода с помощью MaskedTextBox элемента управления. Объект маска представляет собой строку, состоящую из знаков языка масок, указывающее, какие символы можно вводить в любом месте в текстовом поле. Элемент управления отображает набор запросов, для пользователя. Если пользователь вводит неправильную запись, например, пользователь вводит букву, когда требуется цифра, элемент управления будет автоматически отклонять входные данные.
Маскирование язык, используемый MaskedTextBox обладает большой гибкостью. Он позволяет указать обязательные символы, дополнительные символы, литеральных символов, такие как дефисы и круглые скобки, символы валют и разделители компонентов даты. Элемент управления также работает при привязке к источнику данных. Format События привязки данных можно использовать чтобы переформатировать входящих данных в соответствии с маской и Parse событий может использоваться для переформатирования выходных данных в соответствии со спецификациями поля данных.
Дополнительные сведения см. в разделе элементом управления MaskedTextBox.
Проверка на основе событий
Если требуется полный программный контроль над проверкой, или необходимо выполнить сложную проверку, следует использовать события проверки, встроенные в большинство элементов управления Windows Forms. Каждый элемент управления ввода данных пользователем в свободной форме имеет Validating событие, которое будет выполняться каждый раз, когда элементу управления требуется проверка данных. В Validating метод обработки событий, можно проверить пользовательский ввод несколькими способами. Например если у вас есть текстовое поле, которое должно содержать почтовый код, проверку можно выполнить одним из следующих способов:
Если почтовый индекс должен принадлежать к определенной группе почтовых индексов, можно выполнить сравнения строк во входных данных для проверки введенных пользователем данных. Например если почтовый индекс должен быть в наборе {10001, 10002, 10003}, сравнения строк можно использовать для проверки данных.
Если почтовый индекс должен быть в конкретной форме можно использовать регулярные выражения для проверки введенных пользователем данных. Например, чтобы проверить формат
#####
или#####-####
, можно использовать регулярное выражение^(\d{5})(-\d{4})?$
. Чтобы проверить форматA#A #A#
, можно использовать регулярное выражение[A-Z]\d[A-Z] \d[A-Z]\d
. Дополнительные сведения о регулярных выражениях см. в разделе регулярные выражения .NET Framework и Примеры регулярных выражений.Если почтовый индекс должен быть действительный почтовый индекс США, можно вызвать ZIP-код веб-службы для проверки введенных пользователем данных.
Validating Событий передается объект типа CancelEventArgs. Если выяснилось, что данные элемента управления не является допустимым, вы можете отменить Validating событий, установив этот объект Cancel свойства true
. Если вы не установите Cancel , Windows Forms будет предполагать, что проверка выполнена успешно, для этого элемента управления и вызвать Validated событий.
Пример кода, проверяющее адреса электронной почты в TextBox, см. в разделе Validating.
Привязка данных и проверка на основе событий
Проверка очень полезна в случаях, когда элементы управления привязаны к источнику данных, например в таблице базы данных. С помощью проверки, можно гарантировать, что данные элемента управления, удовлетворяющий формат, требуемый источник данных, и что он не содержит специальные символы, такими как кавычки и символы косой черты, может быть небезопасным.
При использовании привязки данных, синхронизации данных в элементе управления с источником данных во время выполнения Validating событий. Если вы отмените Validating событий, данные не будут синхронизированы с источником данных.
Important
При наличии пользовательской проверки, выполняемого после Validating событие, он не затрагивает привязки данных. Например, если у вас есть код Validated событие, которое пытается отменить привязку данных, по-прежнему происходит привязка данных. В данном случае для выполнения проверки в Validated событий, измените элемент управления режим обновления источника данных свойство (в группе (Databindings)\ (Дополнительно) ) из OnValidation для никогдаи добавьте управления.DataBindings["
<YOURFIELD > "].WriteValue()
в код проверки.
Явная и неявная проверка
Если данных элемента управления получить проверку? Это до вас как разработчика. Можно использовать явную или неявную проверку, в зависимости от потребностей приложения.
Неявная проверка
Неявная проверка данные проверяются как пользователь вводит его. Можно проверить данные, как данные, введенные в элемент управления путем чтения клавиш, как их нажатия или более часто всякий раз, когда пользователь принимает фокус ввода от одного элемента управления и переходит к следующему. Этот подход полезен в тех случаях, когда вы хотите предоставить отзывы пользователей о данных, так как они работают.
Если вы хотите использовать неявную проверку для элемента управления, необходимо задать элемента управления AutoValidate свойства true
. Если вы отмените Validating событий, поведение элемента управления определяется значением назначенные AutoValidate. Если вы назначили EnablePreventFocusChange, отменяющую событие вызовет Validated события не возникают. Фокус ввода будет оставаться на текущий элемент управления, пока пользователь не данных допустимые данные. Если вы назначили EnableAllowFocusChange, Validated событие не происходит при отмене события, но фокус все равно перемещается к следующему элементу управления.
Назначение Disable для AutoValidate свойство предотвращает неявная проверка полностью. Чтобы проверить элементы управления, необходимо использовать явную проверку.
Явную проверку
При явной проверке проверяет данные за один раз. Можно проверить данные в ответ на действия пользователя, например нажатие кнопки Сохранить или следующей ссылки. Когда происходит действие пользователя, можно активировать явную проверку в одном из следующих способов:
Вызовите Validate проверяемый последний элемент управления потерял фокус.
Вызовите ValidateChildren для проверки всех дочерних элементов управления в форму или контейнерный элемент управления.
Вызовите пользовательский метод для проверки данных в элементах управления вручную.
Неявная проверка по умолчанию для Windows Forms, элементы управления
Различные элементы управления Windows Forms имеют различные значения по умолчанию для их AutoValidate свойство. В следующей таблице показаны наиболее распространенных элементов управления и их значения по умолчанию.
Элемент управления | Поведение проверки по умолчанию |
---|---|
ContainerControl | Inherit |
Form | EnableAllowFocusChange |
PropertyGrid | Свойство, не представлены в Visual Studio |
ToolStripContainer | Свойство, не представлены в Visual Studio |
SplitContainer | Inherit |
UserControl | EnableAllowFocusChange |
Закрытие формы и обход проверки
Если элемент управления сохраняет фокус, так как данные, содержащиеся в ней являются недопустимыми, вы не сможете закрыть родительскую форму одним из обычных способов:
Щелкнув закрыть кнопки.
Выбрав закрыть в системы меню.
Путем вызова Close метод программным способом.
Однако в некоторых случаях может потребоваться разрешить пользователю закрыть форму независимо от того, допустимы ли значения в элементах управления. Можно обойти проверку и закрыть форму, которая по-прежнему содержит недопустимые данные путем создания обработчика для формы Closing событий. В событии задайте Cancel свойства false
. Это приводит к закрытию формы. Дополнительные сведения и пример см. в разделе Form.Closing.
Note
Если принудительно форму, чтобы закрыть таким образом, теряются все данные в элементы управления формы, который уже не был сохранен. Кроме того модальные формы не проверяют содержимое элементов управления при их закрытии. Проверку элемента управления по-прежнему можно использовать для блокировки фокус на элементе управления, но у вас нет причин беспокоиться о поведение, связанное с закрытием формы.