DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

KeyPressなどのキーイベントをすべてフォームが受け取るようにする

通常フォーム上のコントロールにフォーカスがある時にキーをたたくと、 KeyPress、KeyDown、KeyUpイベントはそのコントロールにのみ渡されます。しかし、フォームのKeyPreviewプロパティをTrueにすると、すべてのキーイベントをまずフォームが受け取り、処理が終了してからフォーカスのあるコントロールに渡されるようになります。また、eパラメータのHandledプロパティをTrueにすることにより、フォーカスのあるコントロールにキーイベントを渡さないようにすることもできます。

次の例では、Form1のKeyDownイベントで受け取ったキーの種類を表示し、Button1をクリックするたびにForm1のKeyPreviewプロパティのTrue/Falseを入れ替えるようにしています。このようなコードでKeyPreviewプロパティの効力を確認してみてください。

VB.NET
コードを隠すコードを選択
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
C#
コードを隠すコードを選択
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にしてもフォームで受け取ることはできません。
  • 履歴:
  • 2007/4/20 PreviewKeyDownイベントに関する記述を追加。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • .NET Tipsをご利用いただく際は、注意事項をお守りください。