- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在处理一个项目,该项目处理设置热键以执行操作。我有热键功能,但如果键仅由修饰符组成,我不想允许设置热键。例如,Ctrl + F 是有效的热键,但 Ctrl + Alt 不是。
我已经尝试了几种方法来从实际的 Keys 枚举对象中剥离修饰键,然后对照 Keys.None 检查它以确定它是否仅由修饰键组成。然而,在实践中,效果并不理想。
我首先尝试了这个方法:
private Keys StripModifiers(Keys Key)
{
return Key & ~Keys.Modifiers;
}
那没有用,因为我的 Ctrl 键似乎是在使用 LButton 的 KeyData 属性调用 PreviewKeypress 方法 | Shift键 |控制,Keys.Modifiers 位掩码显然没有完全捕获。
我试着写了我自己的,更复杂的:
private Keys StripModifiers(Keys Key)
{
return Key &
~Keys.Alt &
~Keys.CapsLock &
~Keys.Control &
~Keys.ControlKey &
~Keys.LControlKey &
~Keys.LMenu &
~Keys.LShiftKey &
~Keys.LWin &
~Keys.MButton &
~Keys.Menu &
~Keys.NumLock &
~Keys.RButton &
~Keys.RControlKey &
~Keys.RMenu &
~Keys.RShiftKey &
~Keys.RWin &
~Keys.Scroll &
~Keys.Shift &
~Keys.ShiftKey;
}
然而,这也不起作用,因为按下 A 键(它只是调用 KeyData 属性为 65 的事件)会将其减少为 Keys.None,因此限制太多。
在这一点上我几乎不知所措,以前有没有人遇到或解决过这个问题?
最佳答案
您的原始代码是正确的。您可以使用 Key & Keys.KeyCode
使其更易读,但会产生相同的结果。所以你需要在选项窗口中使用这个方法:
private static IsValidShortcutKey(Keys key) {
return (key & Keys.KeyCode) != Keys.None;
}
然后您在谈论 ProcessKeyPreview() 时会有点不知所措。您应该使用 ProcessCmdKey() 而不是顺便说一句。那是稍后,在用户选择一个被 IsValidShortcutKey() 认为有效的 key 很久之后。是的,任何 键都会使该方法运行,无论它是否与您选择的快捷方式匹配。由于具有 [Flags] 属性的 Keys 枚举导致 Keys.ToString() 方法在显示真实击键方面做得很糟糕,因此造成了额外的困惑。转换为 int 以查看实际值。
因此您应该有两个 截然不同的代码块。选项菜单中的一个 block ,用于检查请求的击键是否有效。它应该使用 IsValidShortcutKey()。
还有另一个检查键是否被按下的 block 。这应该类似于这样的东西:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
if (keyData == keySelectedInConfig) {
RunOperationSelectedInConfig();
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
关于c# - 从 Windows 窗体键中剥离修饰符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10643397/
有没有一种快速的方法(无需显式循环遍历字符串中的每个字符)并剥离或保留它。在 Visual FoxPro 中,有一个函数 CHRTRAN() 可以很好地完成这项工作。它是 1:1 字符替换,但如果替换
在 python/pandas 中清理多类型数据框的值,我想修剪字符串。我目前正在按照两个说明进行操作: import pandas as pd df = pd.DataFrame([[' a '
通常情况下,我正在编写剥离新类型的唯一构造函数的函数,例如在以下函数中返回不是 Nothing 的第一个参数: process (Pick xs) = (\(First x) -> x) . mcon
我正在尝试逐渐将 AOSP 从其默认应用程序中剔除。但是我想知道我要应用的方法是否是正确 并且是最有效 . 在查看了这样做的方法后,我来到了以下 方法: (示例应用程序 - “package_name
使用时 hg log --template "{date|isodate} --- {rev}:{node|short} --- ... " 2011-10-07 19:25 -0400 --- 1:
我想在 mySQL 中创建数据库位置记录。我在选择框中有以下 html 字符串: Aka AkaArarimuAwhituBombayBuckland '> 我不想在数据库中手动输入记录,而是想去掉
我目前正在开发一个 Android 项目,其中我使用 Android NDK 用 C 语言进行一些计算。 只要我不运行 proguard,我的应用程序就可以正常工作,但是当我运行时,“reportPr
我想要一个通用的 .js 文件,对于页面上遇到的每个 form,在提交时,它会从所有 textarea、 中删除 HTML input 和 select 元素。我觉得我缺少一个基本技巧。 $("for
我正在尝试编写一个简单的 Python 脚本,它将文本文件作为输入,删除每个非文字字符,并将输出写入另一个文件中。通常我会采取两种方式: 使用正则表达式结合 re.sub 将每个非字母字符替换为空字符
我敢肯定这个问题以前有人问过,但我已经看过了,但找不到答案,或者我只是做错了什么。 HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.Htm
我有这行代码: var newmsg = $('' + ""+dateFormat(timesp)+ " | " + pseudo + ' : '); newmsg.find(".msg").text
我正在尝试从 Windows 路径中删除前缀。我尝试使用 strip_prefix 来做到这一点方法,但它失败了。您可以在 Rust Playground 上试用.即使在 RUST_BACKTRACE
使用这个 question ,我正在试验 substr 和 strrpos,但似乎无法正确处理。 我有一个来自 MySQL 数据库的名称列,其中包含名字和姓氏,如下所示: Doe, Jane A 现有
好的,我如何使用正则表达式删除 http AND/OR www 只是为了让 http://www.domain.com/ 进入 domain.com 假设 x 是任何类型的 TLD 或 cTLD 输入
我正在尝试从 this website 中抓取项目. 项目是:品牌、型号和价格。由于页面结构的复杂性,spider 使用了 2 个 xpath 选择器。 品牌和型号商品来自同一个 xpath,价格来自
这个问题在这里已经有了答案: 关闭 11 年前。
我有一个包含一些 html 标签的字符串,如下所示: " This is a test " 我想去掉标签之间的所有多余空格。我尝试了以下方法: In [1]: import re In [
我目前有一个 URL 列表 http://www.website.com/dynamic/download.ashx?id=123/12/12345 http://www.website.com/dy
我环顾四周,找不到一种简单/单行的方法来去除 numpy 数组中的空格:: print(type(p)) print(p) [{' SPL', 'GPU', 'bcc'} {'ANZ ', 'ROI
我有一个自定义共享点应用程序,其安全模型取决于 HTTP header 。当从移动设备发出请求时,每个请求都会添加一个名为 HTTP_RIM_DEVICE_EMAIL 的 http header 。我
我是一名优秀的程序员,十分优秀!