【问题标题】:Catch/Handle Keydown Event From All Control Inside Groupbox从 Groupbox 内的所有控件中捕获/处理 Keydown 事件
【发布时间】:2018-03-19 10:48:34
【问题描述】:

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

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

【问题讨论】:

  • 有不止一种方法可以做到这一点,如果你不解释为什么需要这个,你就无法得到最好的答案。
  • 我在描述中做了一些修改

标签: vb.net vb.net-2010


【解决方案1】:

这似乎工作正常它遍历组框中的控件集合并将.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

【讨论】:

  • 所以我需要在那里一个一个地添加每个控制键。?有没有其他方法可以自动包含我在该组框中添加的任何控件。?
  • 顺便说一句,我已经尝试了您的建议,并且它正在工作。所以如果没有其他办法,那我就标记为答案。
  • 可能。让我试一试。
猜你喜欢
  • 2021-03-05
  • 2015-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多