Dicas .NET - Melhorando a validação em formulários Windows

Veja nessa dica, como melhorar a validação de controles em formulários Windows Forms.

Melhorando a validação em formulários Windows

O sistema de validação existente no ambiente Windows Forms possui pequenos problemas chatinhos, mas que podem ser contornados.

A validação de dados é feita em um evento chamado validating, existente em diversos objetos, como em caixas de texto. Programamos este evento para cada campo de um formulário Windows. Quando uma informação estiver inválida podemos fazer com que o foco fique preso na caixa.

O problema é que no .NET o validating ocorre dentro do processo de perda de foco de uma caixa. Isso quer dizer que se o usuário abrir uma tela de gravação de dados e clicar diretamente no botão gravar, sem dar foco a caixa alguma, as validações não serão executadas. Apenas serão executadas as validações das caixas que ganharam o foco.

Porém podemos resolver isso com uma codificação simples. Veja :

 

'Essa variável serve de flag, se deu erro ou não

Dim temErro As Boolean = False

 

Private Sub TextBox2_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TextBox2.Validating

  If Not IsNumeric(TextBox2.Text) Then

    ER.SetError(TextBox2, "A caixa precisa conter números")

    temErro = True

    e.Cancel = True

  Else

temErro = False

ER.SetError(TextBox2, "")

  End If

End Sub

 

O evento validating usa um errorProvider e define o valor do flag

 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

  ValidarTudo(Button1)

  If Not temErro Then

MsgBox("Ok")

  End If

End Sub

 

O botão chama uma função de validação e testa o flag para fazer sua tarefa.  Eis então a função de validação:

 

Sub ValidarTudo(ByVal controlefoco As Control)

  Dim c As Control

  For Each c In Me.Controls

    c.Focus()

    controlefoco.Focus()

  Next

End Sub

 

A função recebe o botão como parâmetro. Faz um laço nos controles do formulário dando o foco ao controle e depois novamente ao botão. Dar o foco ao botão (ou qualquer outro objeto) é necessário já que o validating faz parte da seqüência de perda de foco, ou seja, o foco tem que ser retirado das caixas para que ele ocorra.

Desta forma mesmo que o usuário clique no botão de OK sem ter entrado nas caixas, o botão Ok provocará o validating das caixas para verificar se está tudo correto.

 

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados