Catch/Handle 来自 Groupbox 内所有控件的按键事件

Catch/Handle Keydown Event From All Control Inside Groupbox

有没有办法使用一个事件处理程序从任何控件(例如组框内的文本框)捕获所有 keydown 事件。? 我尝试 groupbox_keydown,但没有触发。我尝试在 msdn 中进行一些研究,他们说 groupbox 无法获得焦点,因此永远不会引发 keydown 事件。有什么解决方法吗? KeyPreview 已设置为 True。

编辑: 我在组框中有一些文本框。他们中的大多数都有默认值或预定义值。我想要的是当用户填写了所需的数据并想跳过一些文本框时,他只需要按 ctrl+enter 之类的键来执行单击该组框中的按钮或调用过程。

这似乎工作正常它循环访问组框中的控件集合并将 .KeyDown 事件添加到示例处理程序。

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    For Each ctl As Control In GroupBox1.Controls
        AddHandler ctl.KeyDown, AddressOf GroupBox1Controls_KeyDown
    Next
End Sub

Private Sub GroupBox1Controls_KeyDown(sender As Object, e As KeyEventArgs)
    MessageBox.Show(DirectCast(sender, Control).Name)
End Sub

可能有些控件没有 .KeyDown 事件,因此您可能想像这样在代码中添加一个空的 Try..Catch..End Try 块,但我不会推荐它,因为它可以隐藏代码的其他问题。

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    For Each ctl As Control In GroupBox1.Controls
        Try
            AddHandler ctl.KeyDown, AddressOf GroupBox1Controls_KeyDown
        Catch
        End Try
    Next
End Sub