- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我试图在一个小测试 Windows 窗体应用程序上获得一些键盘响应,我有一个粗略的解决方案,即覆盖 ProcessCmdKey。但是,我遇到了几个问题,并且发现了不一致之处。
不同的事件:有没有办法在参数 ref Message msg, Keys keyData
中判断 even 是 KeyDown、KeyUp 还是 KeyPress ?
KeyPress: 我看过的所有地方都说 KeyPress,即重复的键盘输入,只发生在字符键上,而箭头键则不会。但是,对于箭头键和字符键,事件处理程序被频繁地调用,并且以相同的方式/具有相同的行为。这是面对 KeyPress 事件,还是其他什么?
理想情况下,我希望有一种方法可以在表单级别处理所有键盘事件,而不让它们传递给表单上的控件。然而,所有的文档足以让我感到困惑,并且遗漏了关键点,以致于我未能完成此任务。
感谢您就这些主题中的任何一个提供帮助。谢谢!
最佳答案
在您的表单中覆盖 ProcessCmdKey 明确旨在允许您在按钮和菜单项中的内置助记符处理之外实现自定义快捷键击键处理。
它只在按键按下事件上被调用,在具有焦点的控件获得 KeyDown 事件之前,而不管哪个客户端控件具有焦点。所以不与 KeyUp 关联,也不与 KeyPress 关联。在执行快捷功能后,当您识别出该键时,您会从覆盖中返回 true。这可以防止键被进一步处理,它不会生成任何 KeyDown/Press/Up 事件。
很少使用该方法的 msg 参数,msg.Msg 值只会是 WM_KEYDOWN 或 WM_SYSKEYDOWN,当用户按住 Alt 键时会产生后一条消息。你不关心哪个,因为你总是可以从 keyData 参数中得到 if 。像这样:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
if (keyData == (Keys.Alt | Keys.F)) {
// Alt+F pressed
doSomething();
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
您可能希望使用 | 检查其他修饰符此处使用的运算符是 Keys.Shift 和 Keys.Control。因此 (Keys.Shift | Keys.Control | Keys.F1) 检查 Ctrl+Shift+F1。当您想做一些不寻常的事情时,例如检查重复键,您可以解释 msg 数据。检查 MSDN 文档以获取 WM_KEYDOWN 通知。 msg.LParam 值包含一堆关于击键的信息。
请注意,在此方法中您只能获得虚拟 键。 Keys.F 是英文键盘布局上的 F 键,但不一定是用户布局上相同位置的键的相同字母。优先使用功能键以避免文档问题。
按键重复是键盘 Controller 的一项功能,并不局限于键入按键。箭头键和功能键在按住时肯定会重复。在这种情况下,您想忽略 KeyPress。但是,如果您为同时也是输入键(如 Keys.F)的键分配快捷键,那么您希望始终同时检查修改键,这样您就不会破坏像 TextBox 这样的控件。
最后但同样重要的是,不要忘记按钮和菜单项控件中对助记符的内置支持。像 &OK
这样编写它们的 Text 属性会生成一个 self 记录的快捷方式,而无需任何代码。由用户操作,在此示例中,通过键入 Alt+O。
关于c# - 关键事件 : ProcessCmdKey,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10468200/
我已经运行 nagios 大约两年了,但最近这个问题开始出现在我的一项服务中。 我越来越 CRITICAL - Socket timeout after 10 seconds 对于 check_htt
我用 CSS 做到了这一点: 但我希望我的客户更改图像框架。在我的图像中,当前帧只是一种颜色 (#000)。但框架可以是装饰性的。因此,客户应使用装饰图像进行取景。我看过 W3Schools' bor
我编写了一个脚本来检查对象中是否有任何缺失的字段,然后返回具有缺失字段的项目的 ID。 它正在返回: [ '222', '333' ] 我期望返回: ['333'] 为什么它也返回222 id? fu
我正在读 Ramakrishnan 的书数据库管理系统,在模式细化和范式相关的章节中,我看到一句话说: K is a candidate key for R means that K ----> R
我正在编写一个 Java 应用程序,以在一夜之间自动化在线游戏中的角色 Action (特别是,它在《最终幻想 XI》中捕鱼)。该应用程序大量使用 java 的 Robot 类来模拟用户键盘输入和检测
我有这个 react 代码,我在某些输入组件上使用 new Date().getTime() 作为 react 键 Prop 。这可能是一种反模式,因为键需要稳定。但我想了解为什么这如此有问题。为什么
我正在尝试将我的简单查询优化为更复杂的查询。 我有三个表 Table 1 a_id info 1 talk 2 talk 3 sleep 4 sit Table 2
Google PageSpeed 审核建议将首屏内容的关键 CSS 添加到 中的标签,并将其余部分推迟到内容加载完成之后。 虽然我不同意这种做法,但正确的实现方式是什么? 我对使用它有一些保留意见
我已经使用 Pika 将 Websocket 集成到 Tornado 和 RabbitMQ 中。它成功地在各种队列上运行直到一段时间。然后引发以下错误: 严重:pika.connection:关闭时尝
我在本地使用 Gulp 和 SASS 进行开发,为动态站点(即 CMS 驱动)编译 CSS。我正在尝试配置一个解决方案来编译全局与关键路径 CSS。到目前为止最好的想法是将我的主要 scss 文件拆分
关于为 gtkmm 运行以下 simple.cc 示例 #include int main(int argc, char * argv[]){ Glib::RefPtr app = Gt
我正在生成一个 TSX 元素列表: this.productsModel = this.state.products.map(o => ( 但是,react 警告我:
我正在使用 Addy Osmani 的“Critical” https://github.com/addyosmani/critical 下面的 package.json 工作正常,但构建仅复制关键
我有一个 Multimap multimap = ArrayListMultimap.create(); 来自 Guava 。我想知道如何对多图中的 Date 键进行排序。 目前,我正在这样做:
我有一个基于 Jekyll 的网站,我想尽快完成它。我的目标是构建 Jekyll 站点、生成关键 CSS 并缩小 HTML 的 gulp 任务。 我的 gulpfile 的一部分看起来像这样: gul
考虑以下串行函数。当我并行化我的代码时,每个线程都会从并行区域(未显示)内调用此函数。我正在努力使这个线程安全和高效(快速)。 float get_stored_value__or__calculat
我正尝试在 tensorflow 中为我自己的自定义类别重新训练 Inception v3 模型。我已经下载了一些数据并将其格式化为目录。当我运行时,python 脚本为图像创建了瓶颈,然后当它运行时
我该如何追查此错误消息的根本原因? (test:1090): GStreamer-CRITICAL **: gst_debug_log_valist: assertion `category != N
我想为要托管在 Pivotal CloudFoundry 上的 Spring Boot 应用程序强制执行 HTTPS,我想现在大多数应用程序都需要这样做。据我所知,常用的方法是使用 http.requ
在 Travis CI 上运行 Pytest 时,我收到 Key -Error。请在下面找到我的程序: import sys import os sys.path.append(os.path.dir
我是一名优秀的程序员,十分优秀!