none
Anular el KeyPress de un formulario heredado. RRS feed

  • Pregunta

  • Hola de nuevo. 

    En el evento 'frmMantBase_KeyPress' de un formulario base tengo el siguiente código:

       Public Overridable Sub frmMantBase_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress
          Try
             If e.KeyChar = Convert.ToChar(Keys.Enter) Then
                e.Handled = True
                SendKeys.Send("{TAB}")
             End If
          Catch ex As System.Exception
             MessageBox.Show(ex.Message)
          End Try
       End Sub
    

    pero, necesito que un formulario que hereda del formulario base tenga este otro código:

       Private Sub PedidosVentas_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs) Handles MyBase.KeyPress
          Try
             If e.KeyChar = Convert.ToChar(Keys.Enter) And Not txtObsCb.Focused Then
                e.Handled = True
                SendKeys.Send("{TAB}")
             End If
          Catch ex As Exception
             MessageBox.Show(ex.Message)
          End Try
       End Sub
    

    ¿como puedo hacer para que no pase por el evento del formulario base?.

    Sé que es tema de herencia, pero no acabo de entender su funcionamiento.

    un saludo.

    jueves, 23 de junio de 2016 10:47

Respuestas

  • Deberías sobrescribir el método de la clase base utilizando la palabra clave Overrides:

        Public Overrides Sub frmMantBase_KeyPress(sender As Object, e As KeyPressEventArgs)
            Try
                If e.KeyChar = Convert.ToChar(Keys.Enter) And Not txtObsCb.Focused Then
                e.Handled = True
                SendKeys.Send("{TAB}")
                End If
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
        End Sub


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta rbs61 jueves, 23 de junio de 2016 13:16
    jueves, 23 de junio de 2016 11:39

Todas las respuestas

  • Deberías sobrescribir el método de la clase base utilizando la palabra clave Overrides:

        Public Overrides Sub frmMantBase_KeyPress(sender As Object, e As KeyPressEventArgs)
            Try
                If e.KeyChar = Convert.ToChar(Keys.Enter) And Not txtObsCb.Focused Then
                e.Handled = True
                SendKeys.Send("{TAB}")
                End If
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
        End Sub


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta rbs61 jueves, 23 de junio de 2016 13:16
    jueves, 23 de junio de 2016 11:39
  • En el formulario del que heredas debes poner en evento KeyPress como

    Protected Overridable Sub ...

    Y en el formulario heredado pones un evento propio con

    Protected Overrides Sub ...


    Saludos, Javier J

    jueves, 23 de junio de 2016 11:53
  • Hola Asier, lo único es que, en el formulario base no hay observaciones, pero en el heredado si.

    un saludo.
    • Editado rbs61 jueves, 23 de junio de 2016 12:03
    jueves, 23 de junio de 2016 11:59
  • Hola Javier, si pongo en el formulario heredado como me indicas se me activa como un error.

    un saludo.
    • Editado rbs61 jueves, 23 de junio de 2016 12:03
    jueves, 23 de junio de 2016 12:03
  • bueno, he de pedir disculpas a Asier, porque no terminaba de entender su respuesta. Efectivamente he puesto 

       Protected Overrides Sub frmMantBase_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs)
          Try
             If e.KeyChar = Convert.ToChar(Keys.Enter) And Not txtObsCb.Focused Then
                e.Handled = True
                SendKeys.Send("{TAB}")
             End If
          Catch ex As Exception
             MessageBox.Show(ex.Message)
          End Try
       End Sub

    en el evente KeyPress del formulario heredado la solución indicada, y si me funciona.

    muchas gracias.

    un saludo

    jueves, 23 de junio de 2016 13:16