2016-09-01 9 views
0

私はキーを押すたびにブール値を設定する必要があるウィンドウフォームアプリケーションを作成しています。C#keypressがフィールドに書き込む代わりに

しかし、私はテキストフィールドとコンボボックスのキーを押すだけで、キーを押すたびにテキストフィールドとコンボボックスがあるので、簡単です。 アプリケーション内の他の場所をクリックしても問題ありません。

私はテキストフィールドとコンボボックスを使わずにプロジェクトを作ってみたところ、完全に動作しました。

入力フィールドとキー入力イベントを同じフォームで使用するにはどうすればよいですか?

答えて

2

すべてのキーストロークイベントがフォームのイベントハンドラに送られるように、Form.KeyPreviewプロパティを設定します。実行がイベントハンドラにヒットすると、各キーストロークに対してブール値を設定するなど、必要な変数を設定できます。

0

ここのチュートリアルHow to: Handle Keyboard Input at the Form Level

Windowsフォームでは、メッセージがコントロールに到達する前に、 フォームレベルでキーボードメッセージを処理する機能が用意されています。

フォームレベルでキーボードメッセージを処理します。

は、スタートアップフォームのKeyPressイベントまたはKeyDownイベントを処理し、フォームの KeyPreviewのプロパティをtrueに設定ので、キーボードメッセージがあり、彼らは、フォーム上の任意のコントロールに到達する前に、フォームが受信し0​​。

public Form1() 
    { 
     this.KeyPreview = true; 
     this.KeyPress += 
      new KeyPressEventHandler(Form1_KeyPress); 
    } 

    // Detect all numeric characters at the form level and consume 1, 
    // 4, and 7. Note that Form.KeyPreview must be set to true for this 
    // event handler to be called. 
    void Form1_KeyPress(object sender, KeyPressEventArgs e) 
    { 
     if (e.KeyChar >= 48 && e.KeyChar <= 57) 
     { 
      MessageBox.Show("Form.KeyPress: '" + 
       e.KeyChar.ToString() + "' pressed."); 

      switch (e.KeyChar) 
      { 
       case (char)49: 
       case (char)52: 
       case (char)55: 
        MessageBox.Show("Form.KeyPress: '" + 
         e.KeyChar.ToString() + "' consumed."); 
        e.Handled = true; 
        break; 
      } 
     } 
    } 
関連する問題