首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Dotnet频道
中国IT教育
Google
首页 ASP.NET  C#  XML/WebService ADO.NET VC.NET VB.NET .NET 资讯动态 专题 RSS订阅 讨论 下载
您现在的位置: 中国IT实验室 >> Dotnet >> C# >> 正文

小议winForm的热键

    winForm 应用开发,大都离不开winFrom + toolBar/Menu + some other Controls的模式。

    其中快捷键的处理,我5年前就遇到了,现在发现还有人犯这个错误,觉得着实需要讲一下:很多输入型控件都支持常用的Ctrl + C, Ctrl + V, Ctrl + X等热键,WinForm 在KeyPreview=true时也会捕捉这些快捷键被触发的Windows消息。

    如果winFrom/ToolBar/Menu/Other Control这些控件,对快捷键都有处理,上级控件只要设置e.SuppressKeyPress属性值(Boolean 类型),就可以选择是否把key down消息传递给下级控件。这里的上下级是按控件的包含关系来说的。如winForm上有一个TextBox,winForm为上级控件,TextBox为下级控件。

    唯一的例外是ToolBar/Menu控件,它最先截获消息,而且默认情况下,是它触发后,不再把消息往别的控件传送!

    也就是说一旦快捷键设置在Menu上,除了相应的menuItem外,其他控件(包括winForm)将都收不到快捷键被触发的消息。这也是最容易导致bug的地方。为解决这个问题,我一般是在menuitem.click的处理事件中通过sendkeys.send()方法,把消息继续传递下去。

    http://files.cnblogs.com/ColorSky/shortKey.zip

    我做了一个事列程序,只在一个winForm上放了 menu 和 textbox控件,其中一个menuItem.shortkey属性设置为Ctrl + V.在menuItem.click和winForm.Keydown事件中都加上Console.WriteLine()。

    示例程序中很明显的说明了这个问题,outPut窗口的输出结果是:

    Menu item click event is triggered!

    Form Key Down event is triggered !

【责编:Chuan】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 专题推荐

 ·WEB程序开发--ASP.NET和PHP、JSP究竟学哪个?
 ·五步带你入门XML
 ·关于Java框架技术专题
 ·XML全攻略技术专题
 ·JAVA开源技术介绍专题
 ·Java嵌入式开发之J2ME技术专题
 ·超前体验 Oracle 11g的5个新特性…
 ·揭密使用VB.NET的五个实用技巧
 ·Oracle和SQL Server常用函数对比专题…
 ·展现C#世界 C#程序设计专题…
 今日更新
 社区讨论
 博客论点
 频道精选
 Dotnet频道相关导航