C# 窗体(Form)中如何实现全局快捷键 如:[Ctrl + Enter]

大家都知道Form有个AcceptButton属性.......就是绑定一个button,然后不管当前焦点在窗体(Form)的某个控件上,只要按回车就会响应相应的button事件...

this.AcceptButton = button1; //按回车就会响应button1的Click事件

但是这个只能实现回车啊....如果想实现Ctrl + Enter或者其他的Ctrl+ XXX 怎么办呢(如:QQ一样,按Ctrl +
Enter发送消息).....

很多人马上会想到用KeyDown 事件.......没用,如果焦点不在Form上..不会响应这个事件的 ,于是乎可能这个时候很多人想到了用什么API
函数实现...满世界的找相关的信息... 甚至上CSND上问..呵呵

我这里介绍的方法不用什么API函数,一看就会............可能很多人已经用过这个功能啦....知道的可以不看啊

用菜单实现MenuStrip 和 ContextMenuStrip 控件都可以实现...额,我一提到这个控件大家十七八九应该知道怎么用了吧?

拖一个菜单MenuStrip 或者ContextMenuStrip
给菜单添加一个Item...类型是ToolStripMenuItem(就是一个普通的文本),注册Click事件,如果是ContextMenuStrip
那么要绑定给Form窗体....

this.testToolStripMenuItem.Click += new
System.EventHandler(this.testToolStripMenuItem_Click);

//

private void testToolStripMenuItem_Click(object sender,EventArgs e)

{

MessageBox.Show("按啦Ctrl + Enter .......");

}

ToolStripMenuItem是有一个属性[ShortcutKeys]的专门设置快捷看的....而且这个快捷看是的,就是焦点不管落在那个控件上,只要按相应的都会响应相应的Click事件.....

如果在属性栏上设置ShortcutKeys属性为Ctrl + B,就是在Form1.Designer.cs文件中看到这样一段代码

this.testToolStripMenuItem.ShortcutKeys =
((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control |
System.Windows.Forms.Keys.B))); //实现Ctrl + B键

然后的工作是你只需要隐藏testToolStripMenuItem就可以啦: //隐藏...不要让别人看到哟....

testToolStripMenuItem.Visible = false;

这样Ctrl + XXX就实现啦..............属性栏里只选的...但是属性栏里是没有Ctrl +
Enter选的...需要自己改代码

同样是Form1.Designer.cs文件里,只需要把Keys.B 改成Keys.Enter就OK

this.testToolStripMenuItem.ShortcutKeys =
((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control |
System.Windows.Forms.Keys.Enter))); //实现Ctrl + Enter 就搞定啦

提示:最好不要去设置系统自带的快捷键.......如Ctrl + A ,Ctrl + C
.....这样就不响应系统的快捷键啦....如文本框里就不能全选文本等操作啦