Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Quando os usuários inserem dados em seu aplicativo, você pode verificar se os dados são válidos antes de seu aplicativo usá-los. Você pode exigir que determinados campos de texto não sejam de 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 parte, você poderá fazer isso rapidamente e com o mínimo de código usando o MaskedTextBox controle. Uma máscara é uma cadeia de caracteres composta por caracteres de uma linguagem de mascaramento que especifica quais caracteres podem ser inseridos em qualquer posição específica na caixa de texto. O controle exibe um conjunto de prompts para o usuário. Se o usuário digitar 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ífens 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 utilizado para reformatar dados de entrada e adequá-los à máscara, e o Parse evento pode ser utilizado para reformatar dados de saída e adequá-los às especificações do campo de dados.
Validação controlada por eventos
Se você quiser controle programático completo sobre a validação ou precisar de verificações de validação complexas, deverá usar os eventos de validação integrados à maioria dos controles do Windows Forms. Cada controle que aceita entrada de usuário de forma livre tem um Validating evento gerado sempre que o controle requer validação de dados. No código do Validating manipulador de eventos, você pode validar a 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 código postal precisar pertencer a um grupo específico de CEPs, você pode comparar a cadeia de caracteres na entrada para validar os dados inseridos pelo usuário. Por exemplo, se o código postal precisar estar no conjunto
{10001, 10002, 10003}, você poderá usar uma comparação de cadeia de caracteres para validar os dados.Se o código postal 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 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 precisar ser um CEP válido dos Estados Unidos, você poderá chamar um serviço Web de CEP para validar os dados inseridos pelo usuário.
O evento Validating é fornecido com um objeto do tipo CancelEventArgs. Se você determinar que os dados do controle não são válidos, cancele o Validating evento definindo a propriedade desse Cancel objeto como true. Se você não definir a propriedade Cancel, o Windows Forms assumirá que a validação foi bem-sucedida para esse controle e gerará o evento Validated.
Para obter um exemplo de código que valide um endereço de email em um TextBox, consulte a referência de um evento Validating.
Controles de validação orientados por eventos vinculados a dados
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 garantir que os dados do controle satisfaçam o formato exigido pela fonte de dados e que ele não contenha caracteres especiais, como aspas e barras traseiras que podem não ser seguras.
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, ela não afetará a associação de dados. Por exemplo, se você tiver código em um Validated evento que tente 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 de controle Binding.DataSourceUpdateMode de DataSourceUpdateMode.OnValidation para DataSourceUpdateMode.Never, e adicione your-control.DataBindings["field-name"].WriteValue() ao código de validação.
Validação implícita e explícita
Então, quando os dados de um controle são validados? Isso é de responsabilidade sua, desenvolvedor. Você pode usar a validação implícita ou explícita, dependendo das necessidades do aplicativo.
Validação implícita
A abordagem de validação implícita valida os dados à medida que o usuário os insere. Valide os dados lendo as teclas conforme 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 fornecer ao usuário comentários imediatos sobre os dados enquanto eles estão funcionando.
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 a AutoValidatevocê. 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 você atribuiu EnableAllowFocusChange, o evento Validated não ocorrerá quando você cancelar o evento, mas o foco ainda mudará para o próximo controle.
Atribuir Disable à AutoValidate propriedade 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 ao mesmo tempo. 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 que perdeu o foco.
- Chame ValidateChildren para validar todos os controles filho em um formulário ou 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
Controles diferentes do Windows Forms têm padrões diferentes para sua AutoValidate propriedade. A tabela a seguir mostra os controles mais comuns e seus padrões.
| Controle | 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 sobrepondo 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 menuFechar>.
- Chamando o Close método 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 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 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 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.
Consulte também
.NET Desktop feedback