1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

VB.NET | Evento "Validated"

Discussão em 'Programação' iniciada por diog0silva, 29 de Abril de 2009. (Respostas: 5; Visualizações: 1588)

  1. diog0silva

    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?
     
  2. ribeiro55

    ribeiro55 Power Member

    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
     
  3. diog0silva

    diog0silva Power Member

    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".
     
  4. Dark_Webster

    Dark_Webster Power Member

    Não será melhor usar o evento KeyUp para validares o que ta na caixa de texto?
     
  5. iznougud

    iznougud I quit My Job for Folding

    É 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...
     
  6. ribeiro55

    ribeiro55 Power Member

    Ó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.

    Exactamente!
     

Partilhar esta Página