Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Quando os usuários inserem dados em seu aplicativo, você pode verificar se os dados são válidos antes que seu aplicativo os use. 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 de 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, você pode fazer isso rapidamente e com o mínimo de código usando o controle MaskedTextBox. Uma máscara é uma cadeia de caracteres que especifica, através de uma linguagem de mascaramento, quais caracteres podem ser inseridos em qualquer posição na caixa de texto. O controle exibe um conjunto de prompts para o usuário. Se o usuário digita uma entrada incorreta, por exemplo, o usuário digita uma letra quando um dígito é necessário, o controle rejeita automaticamente a entrada.
A linguagem de mascaramento usada por MaskedTextBox é flexível. Ele permite especificar caracteres necessários, caracteres opcionais, caracteres literais, como hífenes e parênteses, caracteres de moeda e separadores de data. O controle também funciona bem quando vinculado a uma fonte de dados. O evento Format numa ligação de dados pode ser usado para reformatar dados de entrada e conformar-se à máscara, e o evento Parse pode ser usado para reformatar dados de saída e conformar-se às 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, use os eventos de validação que são incorporados na maioria dos controles do Windows Forms. Cada controle que aceita entrada de usuário de forma livre tem um Validating evento que é gerado sempre que o controle requer validação de dados. No código do manipulador de eventos, você pode validar a entrada do Validating 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 código postal deve pertencer a um grupo específico de códigos postais, você pode fazer uma comparação de cadeia de caracteres na entrada para validar os dados inseridos pelo usuário. Por exemplo, se o código postal deve estar no conjunto
{10001, 10002, 10003}, então você pode usar uma comparação de cadeia de caracteres para validar os dados.Se o código postal deve estar em um formulário específico, você pode usar expressões regulares para validar os dados inseridos pelo usuário. Por exemplo, para validar o formulário
#####ou#####-####, você pode usar a expressão regular^(\d{5})(-\d{4})?$. Para validar o formulárioA#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ê pode ligar para um serviço Web de código postal para validar os dados inseridos pelo usuário.
É fornecido ao evento Validating um objeto do tipo CancelEventArgs. Se você determinar que os dados do controle não são válidos, cancele o evento Validating definindo a propriedade Cancel deste objeto como true. Se não definir a propriedade Cancel, o Windows Forms assume que a validação foi bem-sucedida para esse controle e gera o evento Validated.
Para obter um exemplo de código que valida um endereço de email em um TextBox, consulte a referência de evento Validating.
Controles associados a dados com validação orientada a eventos
A validação é útil quando você vincula seus controles a uma fonte de dados, como uma tabela de banco de dados. Usando a validação, você pode certificar-se de que os dados do seu controle satisfazem o formato exigido pela fonte de dados e que ele não contém caracteres especiais, como aspas e barras invertidas, que podem 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 evento Validating. Se você cancelar o evento Validating, os dados não serão sincronizados com a fonte de dados.
Importante
Se você tiver uma validação personalizada que ocorre após o evento Validating, isso não afetará a associação de dados. Por exemplo, se você tiver código em um evento de Validated que tenta cancelar a associação de dados, a associação de dados ainda ocorrerá. Nesse caso, para executar a validação no evento Validated, altere a propriedade Binding.DataSourceUpdateMode do controle de DataSourceUpdateMode.OnValidation para DataSourceUpdateMode.Nevere adicione your-control.DataBindings["field-name"].WriteValue() ao seu código de validação.
Validação implícita e explícita
Então, quando os dados de um controle são validados? Isso depende de 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 à medida que o usuário os digita. Valide os dados lendo as teclas enquanto elas são pressionadas ou, mais comumente, sempre que o usuário tira o foco de entrada do controle. Essa abordagem é útil quando você deseja dar ao usuário feedback imediato sobre os dados enquanto eles estão trabalhando.
Se você quiser usar a validação implícita para um controle, você deve definir a propriedade AutoValidate desse controle como EnablePreventFocusChange ou EnableAllowFocusChange. Se você cancelar o evento Validating, o comportamento do controle será determinado pelo valor que você atribuiu a AutoValidate. Se você atribuiu EnablePreventFocusChange, cancelar o evento impede que o Validated evento ocorra. O foco de entrada permanece no controle atual até que o usuário altere os dados para um formato válido. Se atribuíste EnableAllowFocusChange, o evento Validated não ocorrerá quando cancelares o evento, mas o foco ainda mudará para o próximo controlo.
A atribuição de Disable à propriedade AutoValidate impede completamente a validação implícita. Para validar seus controles, use 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 Próximo. Quando a ação do usuário ocorre, você pode acionar a validação explícita de uma das seguintes maneiras:
- Chame Validate para validar o último controle que perdeu o foco.
- Chame ValidateChildren para validar todos os controles filho num formulário ou num controle de contêiner.
- Chame um método personalizado para validar os dados nos controles manualmente.
Comportamento de validação implícita padrão para controles
Diferentes controles do Windows Forms têm padrões diferentes para suas propriedades AutoValidate. A tabela a seguir mostra os controles mais comuns e seus padrões.
| Controlo | 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 |
Fechar o formulário e sobrescrever 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:
- Ao clicar no botão Fechar.
- Ao selecionar o sistema>fechar menu.
- Chamando o método Close programaticamente.
No entanto, em alguns casos, talvez você queira permitir que o usuário feche o formulário, independentemente de os valores nos controles serem 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 FormClosing do formulário. No caso, defina a propriedade Cancel 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 dessa maneira, os dados não 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 em um controle, mas não precisa se preocupar com o comportamento associado ao fechamento do formulário.
Ver também
.NET Desktop feedback