2011-09-23 27 views
5

KeyUpとKeyDownイベントを使用してキーボード入力を読み込もうとしましたが、Winformに他のコントロールを配置すると、キーは読み込まれません。キーが読み取られるようにするにはどうすればよいですか?Winformでキーボード入力を読み取るにはどうすればよいですか?

+0

もしかして? – Yuan

+0

はい、以下の回答に書かれているように、ボタン、テキストボックスなどのコントロールで動作しますが、ユーザーコントロールを配置すると機能しなくなります。 – Bildsoe

+0

これは動作しません、キーボード入力は、フォーカスを持つコントロールに移動します。あなたは本当に何をしようとしていますか? –

答えて

4

フォームにKeyPreview = trueを設定して、キーボードイベントを捕捉することができます。

private void Form1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.A) 
     e.SuppressKeyPress = true; 
} 

Aが押された場合は、キーボードイベントやドロップを受ける愚かなサンプル:

はあなたが理解できるようにを編集しました。
フォーカスがテキストボックスにある場合は、テキストは書き込まれますが、A !!では表示されません。

編集されました:このコードはVB.NETの例から取得しました。
ユーザーコントロールで、テキストボックスの "Keypress"イベントを使用して、 "usercontrolイベント"を発生させます。
このコードは、カスタムユーザーコントロールに次のようになります。

'Declare the event 
Event KeyPress(KeyAscii As Integer) 

Private Sub Text1_KeyPress(KeyAscii As Integer) 
    RaiseEvent KeyPress(KeyAscii) 
End Sub 
+0

これはうまくいかず、私はまだ入力を登録していません。 – Bildsoe

+0

@Bildsoe:私は試して、それは動作します。あなたは 'KeyDown'と' KeyUp'イベントをフォーム上に捕らえるべきです:あなたはそれらを得るでしょう、確かめてください。あなたのコードを投稿しないでください、何か間違っているはずですので... – Marco

+0

おかげで、私はやり直します。私は自分のフォーム上にユーザーコントロールを持っていますが、これは何か変わるのですか? – Bildsoe

2

marcoは、KeyPreviewをtrueに設定すると、キーイベントをコントロールだけでなくフォーム全体でキャッチすると言います。

KeyPressイベントを使用します。KeyUp/Downは、コードよりもフレームワークの方が多くあります。 KeyDownは、キーを無効にしたい場合などに便利です。数字のみのフィールドなどです。一般的に、KeyPressはあなたの後ろにあるものです。

キーストロークが他のコントロールに伝播しないようにするには、KeyPressEventArgs.Handled = trueを設定します。

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

あなたは、イベントハンドラを配線したことがありますか?あなたはまた、プロパティでこれを行うことができます

MyForm.KeyDown += MyHandler; 

を使用すると、キーボード入力を読み取るために、フォーム自体を探しているなら、あなたはすでにからあなたの答えを持っている...イベントアイコンをクリックしてください...

+0

私は上下両方が必要です。私は押されているキーを視覚化したいので、何かがkeyUpとkeyDownの両方で発生する必要があります。 – Bildsoe

+0

ああそうです... KeyUp/Downはちょうど同じように動作します。あなたはイベントハンドラを配線しましたか?イベントセクションのプロパティペインまたはコードのいずれか? MyForm.KeyDown + = MyEventHandler; – iDevForFun

+0

はいイベントハンドラを配線しました。それは動作しますが、フォーム上にユーザーコントロールを配置しても機能しなくなります。 – Bildsoe

0

ペイン他の特派員。私は、フォーム上の他のコントロールやユーザーコントロールにキー処理を追加する可能性があるため、この寄稿を追加しています。私の記事Exploring Secrets of .NET Keystroke Handlingは、DevX.comに公開されています(登録は必要ですが無料です)。さまざまなキー操作のフックやイベントがどのように、また、なぜそのように機能するのかを包括的に説明します。さらに、この記事には無料ダウンロード用の「キーストロークサンドボックス」ユーティリティが含まれており、どのコントロールがどのキー操作イベントを受け取っているかを実際に確認することができます。ここで

は、あなたの食欲を満たすための記事から1つの図は、次のとおりです。あなたがコントロールがある場合、それは空白のフォームと機能していないために働く

enter image description here

関連する問題