在拖放期间处理KeyDown

时间:2010-12-08 00:55:55

标签: winforms drag-and-drop keydown keyevent

我需要响应keydown事件(O,C,G键等,而不是修饰键),而Drag + Drop操作正在我的控件上进行(即在DragEnter和DragLeave之间)。但是,此阶段不会调用KeyDown事件。

我尝试过选择我的控件并专门设置DragEnter,但这不起作用。

编辑:

汉斯的回答基本上是正确的,除了我必须使用GetAsynchKeyState来获得我想要的行为。

2 个答案:

答案 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
}