¿El evento KeyDown no se dispara con .NET WinForms?
ya tengo KeyPreview
establecer en true en las propiedades del formulario
Estoy trabajando en un programa pequeño, y tengo un problema en el que parece que algunos de los controles dentro de los cuadros de grupo no activan el evento KeyDown en mi formulario cuando presiono y suelto cualquier tecla de flecha, solo el evento KeyUp . ¿Hay algún problema con mi código que pueda estar causando esto?
Específicamente, habilité KeyPreview en el formulario y establecí puntos de interrupción ene.SuppressKeyPress = True
en ambas subrutinas, y solo la de frmMain_KeyUp llega al punto de interrupción.
Agregué en los dos eventos de GroupBox con la esperanza de que pudieran mitigar el problema, pero no tuve esa suerte. Sin embargo, tengo un control personalizado en el formulario que está específicamente codificado para ignorar estas pulsaciones de teclas, y el código funciona como se espera en él.
Private Sub frmMain_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown, GroupBox1.KeyDown, GroupBox2.KeyDown
e.SuppressKeyPress = True
Select Case e.KeyCode
Case Keys.Left
ScrollDir = ScrollDir Or 1
Case Keys.Right
ScrollDir = ScrollDir Or 2
Case Keys.Down
ScrollDir = ScrollDir Or 4
Case Keys.Up
ScrollDir = ScrollDir Or 8
Case Else
e.SuppressKeyPress = False
End Select
tScroll.Enabled = True
tScroll_Tick(Nothing, Nothing)
End Sub
Private Sub frmMain_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp, GroupBox1.KeyUp, GroupBox2.KeyUp
e.SuppressKeyPress = True
Select Case e.KeyCode
Case Keys.Left
ScrollDir = ScrollDir And (Not 1)
Case Keys.Right
ScrollDir = ScrollDir And (Not 2)
Case Keys.Down
ScrollDir = ScrollDir And (Not 4)
Case Keys.Up
ScrollDir = ScrollDir And (Not 8)
Case Else
e.SuppressKeyPress = False
End Select
If ScrollDir = 0 Then tScroll.Enabled = False
End Sub
El código en el control de usuario que "ignora" las pulsaciones de tecla es como tal:
Private Sub TileDropDown_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
If e.KeyValue = 40 OrElse e.KeyValue = 38 OrElse e.KeyValue = 39 OrElse e.KeyValue = 37 Then
e.SuppressKeyPress = True
End If
End Sub