2013-06-14 5 views
5

私のコントロールのキーストロークを認識したい。このため私はKeyDownイベントを使用します。私が検出したいキーストロークの種類は、CTRL + AまたはCTRL + Cなどです。 (マルチキーの組み合わせなので)C#KeyDownイベントマルチブルキーとControlKey

私はKeyEventArgsを無効にし、キー列挙型を見つけました。 (すべて正常に動作し、正しいキーを結合して見つけるには&を使用してください) 例はShift + Aです。KeyData列挙体の値は次のとおりです。 ShiftKey |シフト|

しかし

私は応答として131137を得たコントロールキーを押す(そのコントロール+ A)でそれを試してみてください? そして私はControlKeyのようなものが得られない理由を正確にはわかりません。コントロール| A(またはこのようなもの)

私はA ist 131137でB ist 131138でC ist 131139などと試してみると分かりました... だから鍵を計算することは可能だと思いますがより良い解決策が存在するはずです。

131137 - = 65 131072(A用)

私は右アム、またはこれはpreveredソリューションである、または私はいくつかの基本をmissunderstandのですか?

よろしく

+0

のようなものを置くことができますhttp://stackoverflow.com/questions/400113/best-way-to-implement-keyboard- Windowsのショートカットフォームアプリケーション – unlimit

答えて

5

あなたは、Ctrlキーを取得することができ、などをシフト... KeyEventArgsのプロパティを使用して

http://msdn.microsoft.com/en-us/library/system.windows.forms.keyeventargs_properties(v=vs.90).aspx

void Control_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Control && e.KeyCode == Keys.F4) 
    { 
     // Be happy 
    } 
} 
+0

それはそれです。おかげでたくさん:) – Bador

+0

//ハッハッハーになりました:) – coloboxp

+0

F4 + Sをキャプチャするにはどうしたらいいですか? –

2

131072 ==(int型)Keys.Control

オブジェクトso

131137(100000000001000001バイナリ)==(i nt)(Keys.Control | Keys.A)

、あなたはこの質問には、いくつかの助けになるかもしれない

private void myControl_KeyDown(object sender, KeyEventArgs e) { 
    if (e.KeyData == (Keys.A | Keys.Control)) { 
     ... 
    } 
+0

今はなぜ私には明らかです131137は結果です:) – Bador

関連する問題