【问题标题】:vb.net Keydown event on whole form整个表单上的vb.net Keydown事件
【发布时间】:2017-09-15 20:01:33
【问题描述】:

我有一个带有多个控件的表单。无论任何控件事件,我都想在 keydown 事件上运行特定的 sub。 我的意思是,如果用户在表单的任意位置按 Ctrl+S,它就会执行一个子程序。

【问题讨论】:

    标签: vb.net keydown


    【解决方案1】:

    您应该将表单上的 KeyPreview 属性设置为 True 并在那里处理 keydown 事件

    当这个属性设置为true时,表单会接收所有的KeyPress, KeyDown 和 KeyUp 事件。在表单的事件处理程序有 完成对击键的处理,然后将击键分配给 具有焦点的控件。 .......... 处理键盘 事件仅在表单级别,不允许控件接收 键盘事件,设置 KeyPressEventArgs.Handled 属性 表单的 KeyPress 事件处理程序为 true。

    因此,例如,要处理 Control+S 组合键,您可以为表单 KeyDown 事件编写此事件处理程序。

    Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As KeyEventArgs) Handles MyBase.KeyDown
        If  e.Control AndAlso e.KeyCode = Keys.S then
            ' Call your sub method here  .....
            YourSubToCall()
    
            ' then prevent the key to reach the current control
            e.Handled = False 
        End If
    End Sub
    

    【讨论】:

    • 感谢史蒂夫...非常有帮助
    【解决方案2】:

    我以前在我的表单中使用过这段代码,它似乎工作得很好。

    Protected Overrides Function ProcessKeyPreview(ByRef m As System.Windows.Forms.Message) As Boolean
        If m.Msg = &H100 Then  'WM_KEYDOWN
            Dim key As Keys = m.WParam
            If key = Keys.S And My.Computer.Keyboard.CtrlKeyDown Then 
                 'DO stuff
                 Return True
            End If
        End If
    
        Return MyBase.ProcessKeyPreview(m)
     End Function
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-10
      • 2010-11-20
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-14
      • 1970-01-01
      相关资源
      最近更新 更多