我需要响应keydown事件(O,C,G键等,而不是修饰键),而Drag + Drop操作正在我的控件上进行(即在DragEnter和DragLeave之间)。但是,此阶段不会调用KeyDown事件。
我尝试过选择我的控件并专门设置DragEnter,但这不起作用。
编辑:
汉斯的回答基本上是正确的,除了我必须使用GetAsynchKeyState来获得我想要的行为。
答案 0 :(得分:3)
在拖动源上引发QueryContinueDrag事件。检查您感兴趣的键的状态将需要pinvoke,该事件仅用于帮助识别Escape键和修改键状态更改。需要注意的是,这些密钥有任何特殊操作非常无法发现。
[DllImport("user32.dll")]
private static extern short GetKeyState(Keys key);
返回值<键关闭时为0。我不能说保证它能正常工作,但是当我尝试它时看起来很好。
答案 1 :(得分:2)
您还可以尝试:
Keyboard.IsKeyDown();
方法检查特定键是否被按下,即:
bool isKeyPressed = Keyboard.IsKeyDown(Key.LeftAlt);
它类似于上一个答案,但它是一个原生的.NET方法,所以它不需要你导入任何函数。
此处也提出了类似的问题:Handle KeyDown during a drag drop. Or keydown event not workign,但有人建议让它像活动一样运作。
<强>更新强>
第一个解决方案似乎只适用于WPF。如果你想检查修改键的状态,那么有一种方法利用属性Form.ModifierKeys
,它应该在WinForms中正常工作。该示例显示了如何检查是否同时按下了 alt (左侧alt)和 ctrl 键:
if (Form.ModifierKeys == (Keys.Alt | Keys.Control))
{
//TODO: insert your code here
}