Validação da Entrada do Usuário nos Formulários do Windows

Quando os usuários digitam dados no seu aplicativo, convém 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 seja formatado como um número de telefone ou outro tipo de dados bem formado, ou que uma sequência de caracteres não contenha quaisquer caracteres não seguros que podem ser usados para comprometer a segurança de um banco de dados. Formulários do Windows oferecem várias maneiras de você validar a entrada em seu aplicativo.

Validação com o Controle MaskedTextBox

Se você precisar solicitar que os usuários digitem 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 sequência de caracteres composta de caracteres de uma linguagem de mascaramento que especifica quais caracteres podem ser inseridos em determinada posição em uma caixa de texto. O controle exibe um conjunto de instruções para o usuário. Se o usuário digitar uma entrada incorreta, por exemplo, o usuário digita uma letra quando é um dígito é requerido, o controle automaticamente rejeitará a entrada.

A linguagem de mascaramento usada pelo MaskedTextBox é muito flexível. Ela permite que você especifique caracteres exigidos, caracteres opcionais, caracteres literais, tais como hifens 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 pode ser usado em uma associação de dados para reformatar dados de entrada para estar de acordo com a máscara e o evento Parse pode ser usado para reformatar dados de saída para obedecer às especificações do campo de dados.

Para obter mais informações, consulte Controle MaskedTextBox (Windows Forms).

Validação Baseada em Eventos

Se você deseja controle total através de programação sobre a validação, ou se precisar realizar validação complexas, você deve usar os eventos de validação construídos dentro da maioria dos controles de Formulários do Windows. Cada controle que aceita entrada do usuário livre de forma possui um evento Validating que ocorrerá sempre que o controle requerer validação de dados. No método tratador de evento Validating, 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, você pode executar a validação das seguintes maneiras:

  • Se o código postal deve pertencer a um grupo de códigos postais específico, você pode executar uma comparação de strings 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 strings para validar os dados.

  • Se o código postal deve ter uma forma específica, você pode 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 forma A#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 Framework e Exemplos de Expressões Regulares.

  • Se o código postal deve ser um Zip Code americando válido, você poderia chamar um serviço Web de ZIP Codes para validar os dados inseridos pelo usuário.

Ao evento Validating é fornecido um objeto do tipo CancelEventArgs. Se você determinar que os dados do controle não são válidos, você pode cancelar o evento Validating defininado a propriedade Cancel deste objeto como true. Se você não definir a propriedade Cancel, Formulários do Windows irá assumir que a validação foi bem-sucedida para o controle e gerar o evento Validated.

Para um código exemplo que valida um endereço de email em um TextBox, consulte Validating.

Associação de Dados e Validação de Baseada em Eventos

A validação é muito útil quando você tiver vinculado seus controles a uma fonte de dados, como uma tabela de banco de dados. Usando a validação, você poderá garantir que dados do seu controle satisfaçam o formato exigido pela fonte de dados, e que ele não contenham quaisquer caracteres especiais, como aspas e barras invertidas, que podem não ser seguros.

Quando você usa associação de dados, os dados no 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.

Observação importanteImportante

Se você tiver uma validação personalizada ocorrendo após o evento Validating, ela não afetará a associação de dados. Por exemplo, se você tiver código em um evento Validated que tenta cancelar a associação de dados, a mesma ainda irá ocorrer. Nesse caso, para executar a validação no evento Validated, mude a propriedade Data Source Update Mode do controle (em (DataBindings) \ (Advanced) ) de OnValidation para Never e adicione Control.DataBindings[" < SEUCAMPO > "].WriteValue() ao seu código de validação.

Validação explícita e implícita

Então, quando dados de um controle são validados? Isso cabe a você, o desenvolvedor, decidir. 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 insere. Você pode validar os dados enquanto eles são digitados em um controle lendo as teclas enquanto elas são pressionadas, ou mais comumente sempre que o usuário retira o foco de entrada de um controle e move para o próximo. Essa abordagem é útil quando você deseja conceder ao usuário feedback imediato sobre os dados enquanto o mesmo está trabalhando.

Se você deseja usar validação implícita em um controle, você deve definir a propriedade AutoValidate deste controle como true. Se você cancelar o evento Validating, o comportamento do controle será determinado pelo qual valor que você atribuiu a AutoValidate. Se você tiver atribuído EnablePreventFocusChange, cancelar o evento fará com que o evento Validated não ocorra. O foco de entrada permanecerá no controle atual até que o usuário altere os dados para uma entrada válida. Se você tiver atribuído EnableAllowFocusChange, o evento Validated não ocorrerá quando você cancela o evento, mas o foco ainda passará para o próximo controle.

Atribuir Disable à propriedade AutoValidate impede a validação implícita totalmente. Para validar seus controles, você precisará usar validação explícita.

Validação Explícita

A abordagem validação explícita valida os dados de uma 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 acionar a validação explícita de uma das maneiras a seguir:

  • Chame Validate para validar o último controle que tenha perdido o foco.

  • Chame ValidateChildren para validar todos os controles filhos em um formulário ou recipiente de controles.

  • Chame um método personalizado para validar os dados dos controles manualmente.

Comportamento Padrão da Validação Implícita de Controles de Formulários do Windows

Diferentes controles de Formulários do Windows têm diferentes padrões de sua propriedade AutoValidate. A tabela a seguir mostra os controles mais comuns e seus padrões.

Controle

Comportamento Padrão de Validação

ContainerControl

Inherit

Form

EnableAllowFocusChange

PropertyGrid

Propriedade não exposta em Visual Studio

ToolStripContainer

Propriedade não exposta em Visual Studio

SplitContainer

Inherit

UserControl

EnableAllowFocusChange

Fechando o Formulário e Sobrepassando a Validação

Quando um controle mantém o foco porque os dados que contém são inválidos, é impossível fechar o formulário pai de uma das maneiras normais:

  • Clicando no botão Fechar.

  • Selecionando Fechar no menu Sistema.

  • Chamando o método Close via programação.

No entanto, em alguns casos, você pode querer permitir que o usuário feche o formulário não importando se os valores nos controles são válidos. Você pode sobrepassar a validação e fechar um formulário que ainda contém dados inválidos criando um manipulador para o evento Closing do formulário. No evento, defina a propriedade Cancel para false. Isto forçará o formulário a fechar. Para mais informações e um exemplo, consulte Form.Closing.

ObservaçãoObservação

Se você forçar o formulário a fechar desta maneira, qualquer dado nos controles do formulário que não tenha sido salvo será perdido. Além disto, formulários modais nào validam o conteúdo de seus controle quando são fechados. Você ainda pode usar a validação de controles para trancar o foco em um controle, mas você não precisa se preocupar com o comportamento associado ao fechamento do formulário.

Consulte também

Referência

Control.Validating

Form.Closing

System.ComponentModel.CancelEventArgs

Outros recursos

Controle MaskedTextBox (Windows Forms)

Exemplos de Expressões Regulares