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
执行效果截图:
: