通常フォーム上のコントロールにフォーカスがある時にキーをたたくと、 KeyPress、KeyDown、KeyUpイベントはそのコントロールにのみ渡されます。しかし、フォームのKeyPreviewプロパティをTrueにすると、すべてのキーイベントをまずフォームが受け取り、処理が終了してからフォーカスのあるコントロールに渡されるようになります。また、eパラメータのHandledプロパティをTrueにすることにより、フォーカスのあるコントロールにキーイベントを渡さないようにすることもできます。
次の例では、Form1のKeyDownイベントで受け取ったキーの種類を表示し、Button1をクリックするたびにForm1のKeyPreviewプロパティのTrue/Falseを入れ替えるようにしています。このようなコードでKeyPreviewプロパティの効力を確認してみてください。
Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles Button1.Click 'フォームのKeyPreviewを切り替える Me.KeyPreview = Not Me.KeyPreview Console.WriteLine("KeyPreview:" + Me.KeyPreview.ToString()) End Sub Private Sub Form1_KeyDown(ByVal sender As Object, _ ByVal e As System.Windows.Forms.KeyEventArgs) _ Handles MyBase.KeyDown '受け取ったキーを表示する Console.WriteLine(e.KeyCode) End Sub
private void Button1_Click(object sender, System.EventArgs e) { //フォームのKeyPreviewを切り替える this.KeyPreview = !this.KeyPreview; Console.WriteLine("KeyPreview:" + this.KeyPreview.ToString()); } private void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) { //受け取ったキーを表示する Console.WriteLine(e.KeyCode); }
補足:.NET Framework 2.0から追加されたPreviewKeyDownイベントは、フォームのKeyPreviewプロパティをTrueにしてもフォームで受け取ることはできません。
注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。