VB.NET | Evento "Validated"

diog0silva

Power Member
Boas.

Eu tenho um formulário para adicionar clientes. A cada caixa de texto associei uma validação, do género:

PrivateSub txtContacto_Validated(ByVal sender AsObject, ByVal e As System.EventArgs) HandlestxtContacto.Validated

If txtContacto.Text.Length < 9 Then
MsgBox("O contacto é inválido.")
End If

End Sub


Por outro lado, existe um botão "Cancelar" no formulário, cuja função é limpar todos os campos e trancá-los (Enable = False).

O problema é que:
Se tiver a introduzir o contacto (e imaginemos que só ponho 7 caractéres) e não carregar no Tab (para passar para a caixa de texto seguinte) e carregar no "Cancelar", os comandos associados ao botao "Cancelar" não são executados, porque aparece a mensagem "O contacto é inválido", referente à validação do caixa de texto do contacto.

Existe alguma maneira de, ao carregar no "Cancelar", ele ignorar a validação dos campos, e executar logo os comandos associados ao botão?
 
Com validated, à partida, vais ter sempre esse problema.
Quando a textbox perder o foco vai ser "validada".

Há maneiras mais frescas de validar um campo.
A minha favorita é sem dúvida no evento TextChanged alterar a backcolor:

Código:
    Private Sub TextBox1_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.LostFocus
        TextBox1.BackColor = Color.White
    End Sub

    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
        If TextBox1.Text.Length <> 9 Then
            TextBox1.BackColor = Color.Coral
        Else
            TextBox1.BackColor = Color.LightGreen
        End If
    End Sub
 
Com o evento TextChanged, mal ponho um caractér na caixa de texto, são logo executados os comandos todos. Ou seja, dado que é um contacto telefónico, mal ponho o número 2, aparece logo a mensagem de erro que programei "O número de telefone tem de ter 9 digitos".
 
Com o evento TextChanged, mal ponho um caractér na caixa de texto, são logo executados os comandos todos. Ou seja, dado que é um contacto telefónico, mal ponho o número 2, aparece logo a mensagem de erro que programei "O número de telefone tem de ter 9 digitos".

Não será melhor usar o evento KeyUp para validares o que ta na caixa de texto?
 
É por isso que o ribeiro55 usa cores e nao MsgBox para avisar disso. Nunca me tinha lembrado dessa hipótese mas é sem dúvida uma solução elegante. Normalmente faço as validações todas quando carrego num dos botoes. Crio uma funcao para isso que me trata das validações todas e no fim mostra uma MsgBox com todos os campos inválidos.

Como vês soluções há muitas, agora depende dos gostos de cada um...
 
Com o evento TextChanged, mal ponho um caractér na caixa de texto, são logo executados os comandos todos. Ou seja, dado que é um contacto telefónico, mal ponho o número 2, aparece logo a mensagem de erro que programei "O número de telefone tem de ter 9 digitos".

Óbvio. A ideia é essa. Só não podes é usar a messagebox.
Faz um copy-paste integral do que te fiz e vais ver o que acontece.

É por isso que o ribeiro55 usa cores e nao MsgBox para avisar disso. Nunca me tinha lembrado dessa hipótese mas é sem dúvida uma solução elegante. Normalmente faço as validações todas quando carrego num dos botoes. Crio uma funcao para isso que me trata das validações todas e no fim mostra uma MsgBox com todos os campos inválidos.

Como vês soluções há muitas, agora depende dos gostos de cada um...

Exactamente!
 
Back
Topo