2010-12-08 11 views
2

ドラッグ&ドロップ操作がコントロール上(DragEnterとDragLeaveの間)で進行中に、キーダウンイベント(O、C、Gキーなど、修飾キーではなく)に応答する必要があります。ただし、KeyDownイベントはこの段階で呼び出されません。ドラッグドロップ中のハンドルキーダウン

私は自分のコントロールを選択しようとしましたが、特にDragEnterのフォーカスを設定しようとしましたが、うまくいきません。

EDIT:

ハンス答えは私が望んでいた動作を取得するためにGetAsynchKeyStateを使用していた以外、基本的には正しいです。

答えて

3

012ControllerDragイベントは、ソースのドラッグで発生します。興味のあるキーの状態を確認するにはpinvokeが必要です。イベントはエスケープキーと修飾キーの状態の変化を認識するのに役立ちます。これらのキーには特別なアクションがあることを覚えておいてください。非常には発見できません。

[DllImport("user32.dll")] 
    private static extern short GetKeyState(Keys key); 

キーが押されたときに値<を返します。私はそれが正常に動作することが保証されているとは言えませんが、私はそれを試してみました。

+1

おかげハンスは、それがどうなる:例はALT(左ALT)とCTRLキーが両方押されているかどうかを確認する方法を示しています。発見可能性についての心配もなく、ドラッグ操作中にキーショートカットに関する追加情報がコントロールに引き込まれます。 –

2

また、試すことができます。 Keyboard.IsKeyDown();方法の特定のキーが押されたかどうかを確認するために、すなわち:

bool isKeyPressed = Keyboard.IsKeyDown(Key.LeftAlt); 

それは前の回答に似ていますが、それはネイティブの.NETメソッドですので、それはしていません任意の関数をインポートする必要があります。

Handle KeyDown during a drag drop. Or keydown event not workignと同様の質問がありましたが、イベントのように動作させるための提案がありました。

UPDATEは

最初のソリューションは、WPFでのみ動作するようです。 修飾キーの状態をチェックしたい場合は、WinFormsで正しく機能するはずのプロパティForm.ModifierKeysを利用するメソッドがあります。

if (Form.ModifierKeys == (Keys.Alt | Keys.Control)) 
{ 
    //TODO: insert your code here 
} 
+0

良いアドバイスですが、WPFが許可されました。私はwinformsに固執する必要があります。 –

+0

ああ、申し訳ありませんが、私は気づいていません。しかし、私は、WinFormsを使用するときにはうまく動作するはずのモディファイアキーのための別の方法を見つけました。 –

関連する問題