忍者ブログ

VB.NET-TIPS などプログラミングについて

VB.NETのTIPS(小技集)を中心に、Javascript、PHP その他のプログラミングについて少し役に立つ情報を発信します。いわゆる個人的な忘備録ですが、みなさんのお役に立てれば幸いです。

フォームがKeyDownなどのキーイベントを受取り、ファンクションキー処理をする

フォーム上のコントロールがアクティブである場合、キー入力があった時にそのコントロールにキーイベントが発生します。 そのコントロールのキーイベントが発生する前に何か処理を行いたい場合、 フォームの KeyPreviewプロパティをTrueに設定すると、フォームのキーイベントが先に発生します。 このイベント処理で、ファンクションキー等の処理が行えます。

例として、ファンクションキー押下でボタンクリックを行う処理を示します。 この処理ですが、ボタンをマウスでクリックする時と同じことをファンクションキー押下で行えます。
良くあるプログラムで、画面の下にボタンを12個並べて、 ボタンキャプションにファンクションキー名を表示しているあれです。 実行画面は以下の様になります。


以下のソースを見て下さい。 フォームのKeyDownイベントで各キーコードの処理を行っています。
ここで注意するのは e.Handled = True の部分です。 この処理でフォームのKeyDownイベント以降に、その他のコントロールにKeyDownイベント発生を抑止しています。
「F10」などではシステムの予約された処理があるので、それを抑止するためです。

フォームのKeyDownイベントでのファンクションキー処理

Public Class frmFunc

    ''' 
    ''' フォームロードイベント
    ''' 
    Private Sub frmFunc_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        'フォームが先にキーを受け取る設定
        Me.KeyPreview = True
    End Sub

    ''' 
    ''' フォームKeyDownイベント
    ''' 
    Private Sub frmFunc_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
        'キーコードにより処理する
        Select Case e.KeyCode
            Case Keys.F1                            '「F1:キー」
                If Me.Button1.Enabled = True Then   '取りあえずボタン許可チェック
                    Me.Button1.Focus()              'フォーカスセット
                    Me.Button1.PerformClick()       'ボタン1クリック実行
                End If
                e.Handled = True                    '他にKeyDownイベントを発生させない

            Case Keys.F2                            '「F2:キー」
                If Me.Button2.Enabled = True Then   '取りあえずボタン許可チェック
                    Me.Button2.Focus()              'フォーカスセット
                    Me.Button2.PerformClick()       'ボタン1クリック実行
                End If
                e.Handled = True

            Case Keys.F3                            '「F3:キー」
                e.Handled = True

            Case Keys.F10                           '「F10:キー」
                e.Handled = True
        End Select
    End Sub

    ''' 
    ''' ボタン1クリックイベント
    ''' 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        MsgBox("Button1_Click", MsgBoxStyle.OkOnly, Me.Text)
    End Sub

    ''' 
    ''' ボタン2クリックイベント
    ''' 
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        MsgBox("Button2_Click", MsgBoxStyle.OkOnly, Me.Text)
    End Sub

End Class

関連する記事

フォームクラスにプロパティ宣言し外からアクセスする方法
最初のフォームActivatedイベントでの処理(1回のみしか処理しない様にする)
初回のフォームActivatedイベント発生させるフォーム継承について
フォームクラス生成時に設定値を同時に渡す方法











PR

コメント

コメントを書く