2016-05-10 6 views
0

ユーザーがテキストボックスでCtrl + Kを押すと、いくつかのアクションを実行します。C#テキストボックスのCtrl + Kイベントを処理できません

private void subject_TextBox_KeyDown(object sender, KeyEventArgs e) 
     { 
      if (e.Control && e.KeyCode == Keys.K) 
        MessageBox.Show("!"); 
     } 

実行しても何も起こりません。

私はe.Controlが真であることがわかりますデバッグ(これは、私はCtrlキーを押した意味)が、e.KeyCode

enter image description here

すべてのアイデアはK.

に等価ではないでしょうか?

+0

@Ivar、76またはShift、これは間違いです。私はCtrl + Kを押します。 – user3165438

+1

@ user3165438: - '(e.KeyData ==(Keys.Control | Keys.K))'を試してください。 –

+0

私はあなたのコードを試してみました。ブレークポイントを 'MessageBox.Show("! ");に設定すると、' 'e.KeyCode'は75です。 – Wudge

答えて

0

は本当に問題の理由が何であるかを知りません。
Kが押されるのを待つことなく、Ctrlが押されるとすぐにイベントが発生することがあります。

ただし、同じコードをTextBox_KeyUpイベントで使用すると、正常に動作します。

0

KeyDown eventでは、キーボードの「状態」を尋ねるだけです。

あなたは、このトピックをチェックアウトする場合があります:

Capture multiple key downs in C#

1
protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
    { 
     if (keyData == (Keys.Control | Keys.K) && focusedTextbox == subject_TextBox) 
     { 
      //Some Code 
     } 
    } 
private TextBox focusedTextbox = null; 


private void subject_TextBox_KeyDown(object sender, KeyEventArgs e) 
     { 
      MethodName(e.KeyCode) 
     } 
private void MethodName(Keys keys) 
    { 
     focusedTextbox = (TextBox)sender; 
    } 

使用このコードを変更するためのより良い方法を見つけることができれば、これはあなたがそれぞれのテキストボックスに「メソッド名」メソッドを実行したいと思うでしょう、私はそれを自分でテストして、それが動作する動作する、または必要があります " focusedTextBox 'フィールドを使用してください。

+0

自分自身でこれを正しくテストしていますが、KeyDownを使用すると一度に1つのキーが使用されるため、最初のキーしか取得できないことがわかりました – Brendon

+1

ありがとう、これはおそらく問題の理由です。 Upvoted。 – user3165438

+0

いいえ、問題がない場合は、それをチェックしてください。そうすれば、人々はこの質問に出くわして答えを知るでしょう – Brendon

関連する問題