为WinForms程序添加Form级快捷键的最简单方式
2008-01-07 04:43
162 查看
Form.KeyDown, KeyUp, KeyPress在给程序添加快捷键时都不好使,因为某些控件会拦截按键信息,比如你在Form上放一个Button,把焦点移到它上面,随便按个什么键,Form.KeyXXX都是不会引发的。
解决这个问题的正规方法是重写Form.ProcessCmdKey方法,它会在控件处理按键信息之前被调用。但是,假如要更方便,更灵活地处理快捷键--比如由另一个类处理,这个方法就不适用了。这时,最好的办法是:
给窗体添加一个额外的菜单,设计好菜单项的Click事件处理器,然后给它设置ShortcutKeys属性,最后,设置菜单的Visible为false.
需要注意的是,如果你一个窗体有多于一个菜单的话,并且不同的菜单里的菜单项的快捷键有重复的,这时最多只有一个菜单项的事件处理器会被调用,具体说就是按照菜单项被Add到父菜单项的DropDownItems里的顺序(无论父菜单项有没有被Add到另一个父控件中去!)查找,第一个Enable为真的菜单项,它的事件处理器会被调用。这个优先顺序与菜单的可见与否无关,但是与Enable有关。
ps:在使用微软的Debug Symbols + Reflector的人肉调试过程中,发现几行代码,作用是如果一个WinForms进程附加了调试器,那么在这个程序里按Ctrl+Break会使用Debuger冻结程序。
pps: .Net Framework的源代码是不是还不可用? 按Scott的截图设置了VS 2008 Express,结果只能得到Symbols,源码还是没有,一想转到微软的代码里就提示是否显示汇编:(
解决这个问题的正规方法是重写Form.ProcessCmdKey方法,它会在控件处理按键信息之前被调用。但是,假如要更方便,更灵活地处理快捷键--比如由另一个类处理,这个方法就不适用了。这时,最好的办法是:
给窗体添加一个额外的菜单,设计好菜单项的Click事件处理器,然后给它设置ShortcutKeys属性,最后,设置菜单的Visible为false.
需要注意的是,如果你一个窗体有多于一个菜单的话,并且不同的菜单里的菜单项的快捷键有重复的,这时最多只有一个菜单项的事件处理器会被调用,具体说就是按照菜单项被Add到父菜单项的DropDownItems里的顺序(无论父菜单项有没有被Add到另一个父控件中去!)查找,第一个Enable为真的菜单项,它的事件处理器会被调用。这个优先顺序与菜单的可见与否无关,但是与Enable有关。
ps:在使用微软的Debug Symbols + Reflector的人肉调试过程中,发现几行代码,作用是如果一个WinForms进程附加了调试器,那么在这个程序里按Ctrl+Break会使用Debuger冻结程序。
pps: .Net Framework的源代码是不是还不可用? 按Scott的截图设置了VS 2008 Express,结果只能得到Symbols,源码还是没有,一想转到微软的代码里就提示是否显示汇编:(
相关文章推荐
- 为WinForms程序添加Form级快捷键的最简单方式
- 程序不能添加进文件打开方式的注意点
- 如何取消程序的默认打开方式 windows亲测简单有效!
- 对程序添加系统托盘图标支持-一个简单的C++封装
- db的简单使用和gdb+gdbserver方式进行ARM程序调试
- MFC为简单对话框程序添加菜单并加上响应事件
- Cadence Allegro学习之添加快捷键+锁定+对齐方式
- Android Launcher开发(四)Launcher概述及简单添加和删除应用程序的快捷方式
- Android 开发之系统应用Launcher详解,简单添加和删除快捷方式及常见问题
- Android打电话程序(根据添加按钮监听的3种不同方式分别实现)
- 打开方式无法添加程序
- 《c++ 操作xml加载时添加元素简单测试小程序》
- Android 为程序添加桌面快捷方式
- 不用注册热键方式在Delphi中实现定义快捷键(又简单又巧妙,但要当前窗体处在激活状态)
- 如何在桌面添加软件快捷方式,如何设置软件打开快捷键——ubuntu小技巧5
- Android程序添加桌面快捷方式
- 对话框程序添加简单背景图
- C# 将程序添加开机启动的三种方式
- 大钟的ios开发之旅(4)————简单谈谈ios程序界面实现的三种方式(代码创建,xib和storyboard)
- 为MFC程序添加ATL简单对象