Visão geral de como validar a entrada do usuário (Windows Forms .NET)
Quando os usuários inserem dados em seu aplicativo, convém verificar se os dados são válidos antes de seu aplicativo utilizá-los. Você pode exigir que determinados campos de texto não tenham comprimento zero, que um campo formatado como um número de telefone ou que uma cadeia de caracteres não contenha caracteres inválidos. O Windows Forms fornece várias maneiras para validar a entrada em seu aplicativo.
Controle MaskedTextBox
Se você precisar exigir que os usuários insiram dados em um formato bem definido, como um número de telefone ou um número de peça, poderá fazer isso rapidamente e com o mínimo de código usando o MaskedTextBox controle. Uma máscara é uma cadeia de caracteres composta de caracteres de uma linguagem de mascaramento que especifica quais caracteres podem ser inseridos em qualquer posição determinada de uma caixa de texto. O controle exibe um conjunto de avisos para o usuário. Se o usuário digita uma entrada incorreta, como digitar uma letra quando é necessário um dígito, o controle rejeitará automaticamente a entrada.
A linguagem de mascaramento usada por MaskedTextBox é flexível. Ela permite que você especifique os caracteres exigidos, caracteres opcionais, caracteres literais como hifens e parênteses, caracteres de moeda e separadores de data. O controle também funciona bem quando associado a uma fonte de dados. O Format evento em uma associação de dados pode ser usado para reformatar dados de entrada para cumprir a máscara e o Parse evento pode ser usado para reformatar dados de saída para cumprir as especificações do campo de dados.
Validação orientada a eventos
Se você quiser controle programático total sobre a validação ou precisar de verificações de validação complexas, deverá usar os eventos de validação que são incorporados à maioria dos controles do Windows Forms. Cada controle que aceita entrada de usuário de forma livre tem um Validating evento que ocorrerá sempre que o controle exigir validação de dados. No método de manipulação de eventos, você pode validar a Validating entrada do usuário de várias maneiras. Por exemplo, se você tiver uma caixa de texto que deve conter um código postal, poderá fazer a validação das seguintes maneiras:
Se o CEP deve pertencer a um grupo específico de códigos postais, você pode fazer uma comparação de strings na entrada para validar os dados inseridos pelo usuário. Por exemplo, se o CEP deve estar no conjunto
{10001, 10002, 10003}
, você pode usar uma comparação de cadeia de caracteres para validar os dados.Se o CEP precisar estar em um formulário específico, você poderá usar expressões regulares para validar os dados inseridos pelo usuário. Por exemplo, para validar a forma
#####
ou#####-####
, você pode usar a expressão regular^(\d{5})(-\d{4})?$
. Para validar a formaA#A #A#
, você pode usar a expressão regular[A-Z]\d[A-Z] \d[A-Z]\d
. Para obter mais informações sobre expressões regulares, consulte Expressões regulares do .NET e Exemplos de expressões regulares.Se o código postal deve ser um CEP válido dos Estados Unidos, você poderia chamar um serviço Web de código postal para validar os dados inseridos pelo usuário.
O Validating evento é fornecido com um objeto do tipo CancelEventArgs. Se você determinar que os dados do controle não são válidos, cancele o evento definindo a Validating propriedade desse objeto Cancel como true
. Se você não definir a propriedade, o Windows Forms assumirá que a Cancel validação foi bem-sucedida para esse controle e gerará o Validated evento.
Para obter um exemplo de código que valida um endereço de e-mail em um TextBox, consulte a referência de Validating evento.
Controles de validação controlada por eventos
A validação é útil quando você associa seus controles a uma fonte de dados, como uma tabela de banco de dados. Usando a validação, você pode garantir que os dados do controle satisfaçam o formato exigido pela fonte de dados e que não contenham caracteres especiais, como aspas e barras invertidas, que possam não ser seguros.
Quando você usa a associação de dados, os dados em seu controle são sincronizados com a fonte de dados durante a execução do Validating evento. Se você cancelar o Validating evento, os dados não serão sincronizados com a fonte de dados.
Importante
Se você tiver uma validação personalizada que ocorra após o Validating evento, isso não afetará a associação de dados. Por exemplo, se você tiver código em um Validated evento que tenta cancelar a associação de dados, a associação de dados ainda ocorrerá. Nesse caso, para executar a Validated validação no evento, altere a propriedade do Binding.DataSourceUpdateMode
controle de para DataSourceUpdateMode.Nevere adicione your-control.DataBindings["field-name"].WriteValue()
ao código de DataSourceUpdateMode.OnValidation validação.
Validação implícita e explícita
Então quando os dados de um controle são validados? Isso cabe a você, o desenvolvedor. Você pode usar a validação implícita ou explícita, dependendo das necessidades do seu aplicativo.
Validação implícita
A abordagem de validação implícita valida os dados enquanto o usuário os digita. Valide os dados lendo as teclas à medida que são pressionadas ou, mais comumente, sempre que o usuário tirar o foco de entrada do controle. Essa abordagem é útil quando você deseja fornecer ao usuário comentários imediatos sobre os dados enquanto eles estão trabalhando.
Se você quiser usar a validação implícita para um controle, deverá definir a propriedade desse AutoValidate controle como EnablePreventFocusChange ou EnableAllowFocusChange. Se você cancelar o Validating evento, o comportamento do controle será determinado pelo valor atribuído ao AutoValidate. Se você atribuiu EnablePreventFocusChange, cancelar o evento fará com que ele Validated não ocorra. O foco de entrada permanecerá no controle atual até que o usuário altere os dados para um formato válido. Se você atribuiu EnableAllowFocusChange, o Validated evento não ocorrerá quando você cancelar o evento, mas o foco ainda mudará para o próximo controle.
A atribuição Disable à propriedade impede completamente a AutoValidate validação implícita. Para validar seus controles, você precisará usar a validação explícita.
Validação explícita
A abordagem de validação explícita valida os dados de uma só vez. Você pode validar os dados em resposta a uma ação do usuário, como clicar em um botão Salvar ou em um link Avançar . Quando a ação do usuário ocorre, você pode disparar a validação explícita de uma das seguintes maneiras:
- Chame Validate para validar o último controle para ter perdido o foco.
- Chame ValidateChildren para validar todos os controles filho em um controle de formulário ou contêiner.
- Chamar um método personalizado para validar manualmente os dados nos controles.
Comportamento de validação implícito padrão para controles
Diferentes controles do Windows Forms têm padrões diferentes para suas AutoValidate propriedades. A tabela a seguir mostra os controles mais comuns e seus valores padrão.
Control | Comportamento de validação padrão |
---|---|
ContainerControl | Inherit |
Form | EnableAllowFocusChange |
PropertyGrid | Propriedade não exposta no Visual Studio |
ToolStripContainer | Propriedade não exposta no Visual Studio |
SplitContainer | Inherit |
UserControl | EnableAllowFocusChange |
Fechando o formulário e substituindo a validação
Quando um controle mantém o foco porque os dados que ele contém são inválidos, é impossível fechar o formulário pai de uma das maneiras usuais:
- Clicando no botão Fechar.
- Selecionando o menu Fechar do sistema>.
- Chamando o Close método programaticamente.
No entanto, em alguns casos, você talvez queira permitir que o usuário feche o formulário independentemente se os valores nos controles são válidos. Você pode substituir a validação e fechar um formulário que ainda contém dados inválidos criando um manipulador para o evento do FormClosing formulário. No caso, defina a Cancel propriedade como false
. Isso força o formulário a fechar. Para obter mais informações e um exemplo, consulte Form.FormClosing.
Observação
Se você forçar o formulário a fechar desta maneira, todos os dados nos controles do formulário que ainda não tiverem sido salvos serão perdidos. Além disso, os formulários modais não validam o conteúdo dos controles quando eles são fechados. Você ainda pode usar a validação de controle para bloquear o foco de um controle, mas não precisa se preocupar com o comportamento associado ao fechamento do formulário.
Confira também
.NET Desktop feedback