C# 及 VB .NET 工具栏按钮(ToolStripButton)快捷键设置方法建议及注意事项(特别是当窗体中有 WebBrowser 控件时)

Posted by NosaLee in .NET Programming on 26-03-2013. Tags: , , , , ,

作者:牧山道人
原文地址:http://www.seeksunslowly.com/vb-net-toolstripbutton-shortcuts-webbrowser-sc
转载请注明出处,谢谢。
_____________________________________

因为工具栏按钮(ToolStripButton)本身并不支持快捷键,即没有 ShortcutKeys 属性,所以需要单独编码实现。

如下图所示:

ToolStripButton 无 ShortcutKeys 属性!

常用方式有两种,一是通过 Form 的 KeyDown/KeyUp 事件实现(需要将 Form 的 KeyPreview 属性设为 True);二是通过菜单项(ToolStripMenuItem)实现(菜单项支持快捷键,即拥有 ShortcutKeys 属性)。

通过实践,发现工具栏按钮(ToolStripButton)的快捷键最好用菜单实现,如果软件不需要菜单,将之隐藏即可。

原因
1、当焦点在某些控件上时,不能响应窗体的 KeyDown/KeyUp 事件,比如 WebBrowser 控件。
2、直接在菜单项单击事件里调按钮功能比在 Form 的 KeyDown/KeyUp 事件里判断按键再调按钮功能要简单些,代码也更简洁。
其中,第一点是主要原因。

步骤
1、为拥有快捷键的工具条按钮建立对应菜单项(ToolStripMenuItem)。
2、将菜单项快捷键设为与对应按钮需要的快键一致。
3、在菜单项的单击(Click)事件或上级菜单的下拉条目单击事件(DropDownItemClicked)中调用对应按钮功能。

特别注意
当窗体中有 WebBrowser 控件时,通过上述方式实现的工具栏快捷键需要注意:最好不要指定 WebBrowser 本身即具有的快捷键,如<Ctrl+O>打开。

原因:当焦点在 WebBrowser 上时,按下该类快捷键可能会先响应 WebBrowser 的对应功能,而不会响应菜单项单击事件。
注:
1、某些按键可以使用,如<F5>刷新,某些却会产生冲突,如<Ctrl+O>打开。哪些可以指定给菜单项,哪些不能,需要测试。
2、若遇冲突(如<Ctrl+O>打开功能),建议直接加上<Alt>键,如<Ctrl+Alt+O>,以最大程度折中保留用户习惯。
3、乍看起来将 WebBrowser 控件之 WebBrowserShortcutsEnabled 设为 False 可直接避免冲突,但事实上行不通。若为之,则当焦点在 WB 控件中时,不会响应菜单项的快捷键,也不会响应 Form 的 KeyDown/KeyUp 事件。

另注
以上经验不仅针对 .NET 平台,VB6、Delphi 等开发平台应同样适用。

Post a comment