none
e. handled ?

    Pregunta

  • Buen dia
    Tengo una pregunta espero y la puedan responder
    tengo el siguiente codigo:

        Private Sub TextBox1_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
            MsgBox(e.Handled.ToString)

            If Char.IsNumber(e.KeyChar) Then
                e.Handled = False
            Else
                e.Handled = True
            End If

            MsgBox(e.Handled.ToString)


        End Sub

    Mi preguntas son las siguientes
    en las lineas
            If Char.IsNumber(e.KeyChar) Then
                e.Handled = False

    Entra al if cuando es un numero el que presiono en el textbox, y hasta ahi todo bien
    pero si pongo "e.Handled = true"(segun yo para que controle el evento) no me lo muestra en el textbox, ademas que al inicio y al final de este procedimiento conducido por el evento keypress puse un msgbox para visualizar el estado del handled, al entrar al procedimiento.
    Porque es False, cuando entra?, lei que era verdadero cuando atendia a un evento, y falso cuando no.

    Espero me haya dado a explicar y puedan contestarme, quiero comprender bien acerca de este tema.
    Saludos,

    martes, 4 de octubre de 2016 7:37

Respuestas

  • Si pones la propiedad Handled a True significa que tu "manejas" el evento, Esto se usa para controlar los caracteres que se introducen. 
    En el código que pones si el usuario pulsa un carácter NO numérico este no se incluye en TextBox1 porque se pone Handled a True.
    El MsgBox siempre te va a mostrar False que es el valor por defecto de la propiedad Handled

    Saludos, Javier J

    martes, 4 de octubre de 2016 8:02
  • Hola:

    El e.Handled indica si la tecla ya ha sido procesada por 'alguien antes de tu evento'.

    Y si la cambias estás indicando a los 'siguientes eventos al tuyo' que la pulsación ya ha sido procesada.

    En tu evento deberías comprobar si e.Handled = FALSE antes de hacer nada, puesto que si es TRUE significa que la pulsación de la tecla ya ha sido procesada... aunque nadie lo hace ;-)

    En casos normales/habituales, casi siempre se llega al eventos con e.Handled = FALSE, puede ser cierto si existen múltiples controladores del evento, lo cual no es habitual a menos que esté trabajando con clases heredades, etc.

    Si procesas la tecla (por ejemplo la tecla TAB), sino no tocas e.Handled (lo dejas en FALSE), el 'siguiente evento' la procesará y hará lo que toca (en el caso de TAB cambiar el foco al siguiente control). Si quieres evitarlo, pones e.Handled =TRUE y así 'evitarás' que el siguiente evento (que es el evento estandard del textbox) procese la pulsación.

    Espero que te sirva.

    Un saludo



    martes, 4 de octubre de 2016 9:08

Todas las respuestas

  • Si pones la propiedad Handled a True significa que tu "manejas" el evento, Esto se usa para controlar los caracteres que se introducen. 
    En el código que pones si el usuario pulsa un carácter NO numérico este no se incluye en TextBox1 porque se pone Handled a True.
    El MsgBox siempre te va a mostrar False que es el valor por defecto de la propiedad Handled

    Saludos, Javier J

    martes, 4 de octubre de 2016 8:02
  • Hola:

    El e.Handled indica si la tecla ya ha sido procesada por 'alguien antes de tu evento'.

    Y si la cambias estás indicando a los 'siguientes eventos al tuyo' que la pulsación ya ha sido procesada.

    En tu evento deberías comprobar si e.Handled = FALSE antes de hacer nada, puesto que si es TRUE significa que la pulsación de la tecla ya ha sido procesada... aunque nadie lo hace ;-)

    En casos normales/habituales, casi siempre se llega al eventos con e.Handled = FALSE, puede ser cierto si existen múltiples controladores del evento, lo cual no es habitual a menos que esté trabajando con clases heredades, etc.

    Si procesas la tecla (por ejemplo la tecla TAB), sino no tocas e.Handled (lo dejas en FALSE), el 'siguiente evento' la procesará y hará lo que toca (en el caso de TAB cambiar el foco al siguiente control). Si quieres evitarlo, pones e.Handled =TRUE y así 'evitarás' que el siguiente evento (que es el evento estandard del textbox) procese la pulsación.

    Espero que te sirva.

    Un saludo



    martes, 4 de octubre de 2016 9:08