У меня уже есть KeyPreview
, установленной в true в свойствах формы
Я работаю над небольшой программой, и у меня возникает проблема, когда кажется, что некоторые элементы управления внутри групповых блоков не вызывают событие KeyDown в моей форме, когда я нажимаю и отпускаю любую клавишу со стрелкой, просто событие KeyUp. Что-то не так с моим кодом, который может быть причиной этого?
В частности, я включил KeyPreview в форме и установил точки останова на e.SuppressKeyPress = True
в обеих подпрограммах, и только одна для frmMain_KeyUp достигает точки останова.
Я добавил в два события GroupBox, надеясь, что это может смягчить проблему, но не повезло. Однако у меня есть пользовательский элемент управления в форме, который специально закодирован, чтобы игнорировать эти нажатия клавиш, и код работает на нем, как и ожидалось.
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
Код в пользовательском элементе управления, который «игнорирует» нажатия клавиш, таков:
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