【发布时间】:2012-05-25 11:35:33
【问题描述】:
我目前正在从事一个处理设置热键以执行操作的项目。我有热键功能,但如果键仅由修饰符组成,我不想允许设置热键。例如,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,因此限制性太强。
我现在很茫然,以前有没有人遇到过或解决过这个问题?
【问题讨论】:
标签: c# winforms events keyboard hotkeys