章鱼哥出品—VB.Net 自定义快捷键详解之半全局快捷键

VB.Net 定义快捷键有些很方便的方法,我自己将这些快捷键分成了三类(非专业啊,别误导大家)

1、全局快捷键。作用在整个程序,就是不论现在的焦点在哪,在Form1也好Form2也好,只要按下了快捷键就会执行定义的函数
2、半全局快捷键。作用在控件集,比如当焦点不在Form1时,设置的Form1中的热键就不起作用,
但是当焦点在Form1时,不论焦点在Form1种的哪个控件上,这个热键都可以执行

3、局部快捷键。作用在控件上,只有焦点在该控件上时,才起作用

全局热键的定义我在另一篇文章中已经给出了实例说明(章鱼哥出品—VB.NET 自定义快捷键使用详解之全局热键)这里讲解半全局变量。传统的方法我们是在Text属性的命名时,在字母前加上&,比如设置Button1.Text="进入&E",那么在Button1所在的窗体获得焦点的时候,键入Alt+E 就会触发Button.Click事件。这种方法很实用,也很简单。但是我们设想一下,如何用这种方法设置Alt+F1 或者Alt+Esp还有Shift+E \Ctrl+W这些 快捷键呢?(有知道可以直接设置的朋友可以告诉我,我真的不知道)如果是在Button1的KeyDown事件中,用代码定义,那么只有在Button1获取焦点的时候才能触发了,那就是局部热键了。
本文给出了一种方法解决这个问题,大家参考一下。代码直接复制可使用。

'***************************************************************************  
'作者:章鱼哥,QQ:3107073263 群:309816713  
'如有疑问或好的建议请联系我,大家一起进步  
'主要内容:  
'    自定义快捷键之半全局热键,使用两种方法实现,传统的方法在Text属性的字母前面加个&,另一种方法就是在KeyDown事件处理
'   之所以称为半全局热键是因为相对于整个应用程序都适用的热键,这里讨论的是只在该窗体上的热键
'主要功能:  
'    button1 快捷键 Alt+A / button2 快捷键Alt+B/ button3 快捷键 Shift+F1/button4 快捷键 Shift+D
'    button5 快捷键 Ctrl+F2 / button6 快捷键Ctrl+F
'    Button1和Button2的快捷键利用命名的方式设置的
'***********************************************************************  
Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles MyBase.Load
        Me.KeyPreview = True '确定窗体上控件的按键事件向窗体注册,这步一定要有的
    End Sub
    ' 在窗体的KeyDown事件中过滤按键函数
    Private Sub Form1_KeyDown(ByVal sender As System.Object,ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
        Deal_KeyDown(sender,e)
    End Sub

    '按键处理函数
    Private Sub Deal_KeyDown(ByVal sender As System.Object,ByVal e As System.Windows.Forms.KeyEventArgs)

        If e.Shift Then '判断是否曾按下Shift键,以下是Shift+*组合键
            Select Case e.KeyCode
                Case Keys.F1
                    Button3_Click(nothing,nothing)
                Case Keys.D
                    Button4_Click(nothing,nothing)
            End Select
            Exit Sub
        End If
        If e.Control Then '判断是否曾按下Ctrl键,以下是Ctrl+*组合键
            Select Case e.KeyCode
                Case Keys.F2
                    Button5_Click(nothing,nothing)
                Case Keys.F
                    Button6_Click(nothing,nothing)
            End Select
            Exit Sub
        End If
      
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles Button1.Click
        TextBox1.Text = "按钮1触发,快捷键Alt+A"
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles Button2.Click
        TextBox1.Text = "按钮2触发,快捷键Alt+B"
    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles Button3.Click
        TextBox1.Text = "触发按钮3,快捷键Shift+F1"
    End Sub

    Private Sub Button4_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles Button4.Click
        TextBox1.Text = "触发按钮4,快捷键Shift+D"
    End Sub

    Private Sub Button5_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles Button5.Click
        TextBox1.Text = "触发按钮5,快捷键Ctrl+F2"

    End Sub

    Private Sub Button6_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles Button6.Click
        TextBox1.Text = "触发按钮6,快捷键Ctrl+F"
    End Sub
End Class


执行效果截图:

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As Dat...