Tôi đã cóKeyPreview
set là true trong các thuộc tính hình thứcSự kiện KeyDown không kích hoạt bằng .NET WinForms?
Tôi đang làm việc trên một chương trình nhỏ, và tôi đang gặp một vấn đề mà có vẻ như một số các điều khiển trên nó groupboxes bên trong là không kích hoạt sự kiện KeyDown trên biểu mẫu của tôi khi tôi nhấn và thả bất kỳ phím mũi tên nào, chỉ sự kiện KeyUp. Có gì sai với mã của tôi có thể gây ra điều này không?
Cụ thể, tôi đã bật KeyPreview trên biểu mẫu và đặt điểm ngắt trên e.SuppressKeyPress = True
trong cả hai chương trình con và chỉ một điểm cho frmMain_KeyUp truy cập điểm ngắt.
Tôi đã thêm vào hai sự kiện GroupBox với hy vọng có thể giảm thiểu vấn đề, nhưng không có may mắn như vậy. Tuy nhiên, tôi có một điều khiển tùy chỉnh trên biểu mẫu được mã hóa cụ thể để bỏ qua các lần nhấn phím này và mã hoạt động như mong đợi trên đó.
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
Mã trong việc kiểm soát người dùng mà "bỏ qua" bấm phím là như vậy:
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
thiết lập một breakpoint trong mã của điều khiển mà bỏ qua nó và xem nếu nó cháy ít nhất một lần – curtisk
Với 'e.SuppressKeyPress = TRUE' không chú thích trong frmMain KeyDown handler, chương trình con TileDropDown_KeyDown không bao giờ được gọi. Với nó nhận xét, xử lý * được * gọi. – Sukasa