フォーム上のコントロールがアクティブである場合、キー入力があった時にそのコントロールにキーイベントが発生します。 そのコントロールのキーイベントが発生する前に何か処理を行いたい場合、 フォームの 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
コメント