VB.NETのフォームに張り付けた入力コントロールの遷移は通常は「Tab」キーで行えますが、 「Enter」キーでも次の入力コントロールへフォーカスを移動したい要求は少なからずあります。
普通の人はテキストボックスに何かを入力し、入力の最後に「Enter」を押したくなります。 キーボードの配置(形)からしても1個の入力後は「Enter」を押すことが前提の様な感じがします。
さて、複数のTextBoxを並べたFormを例にしますが、画面的には以下の様な感じです。 この画面で、各TextBoxで「Enter」キーを押下した時に、次のコントロールにフォーカスを移動させます。
次のコントロールにフォーカスを移動させるためのメソッドが、Formコントロールのメソッドとして在ります。 以下のメソッドがそうです。
-----
SelectNextControl(ctl As System.Windows.Forms.Control, forward As Boolean, tabStopOnly As Boolean, nested As Boolean, wrap As Boolean) As Boolean
-----
このメソッドをKeyDownイベントで呼出せる形でメソッド化し、 FormのKeyDownで呼出してやるか、または、フォームのコンストラクタでKeyDownイベントにハンドラとして追加してやります。
以下のソースでは、コンストラクタでKeyDownイベントにハンドラを追加しています。
■「Enter」キーによるコントロールの移動メソッド時にビープ音の消音
入力コントロールで「Enter」キーを押下するとビーとBeep音がなります。 これを止めるには、KeyDownイベントで「Enter」の次のコントロール移動をした様に、 KeyPressイベントで、「Enter」キー入力時にイベント処理のキャンセルを行うことです。
=====
2016/03/14:の時の情報
普通の人はテキストボックスに何かを入力し、入力の最後に「Enter」を押したくなります。 キーボードの配置(形)からしても1個の入力後は「Enter」を押すことが前提の様な感じがします。
さて、複数のTextBoxを並べたFormを例にしますが、画面的には以下の様な感じです。 この画面で、各TextBoxで「Enter」キーを押下した時に、次のコントロールにフォーカスを移動させます。
次のコントロールにフォーカスを移動させるためのメソッドが、Formコントロールのメソッドとして在ります。 以下のメソッドがそうです。
-----
SelectNextControl(ctl As System.Windows.Forms.Control, forward As Boolean, tabStopOnly As Boolean, nested As Boolean, wrap As Boolean) As Boolean
-----
引数 | 内容 |
---|---|
ctl |
検索を開始する位置にある System.Windows.Forms.Control |
forward |
タブ オーダー内を前方に移動する場合は true、後方に移動する場合は false |
tabStopOnly |
System.Windows.Forms.Control.TabStop プロパティが false に設定されているコントロールを無視する場合は true、それ以外の場合は false |
nested |
入れ子になった (子コントロールの子) 子コントロールを含める場合は true、それ以外の場合は false |
wrap |
タブ オーダーの最後のコントロールに到達した後、タブ オーダーの最初のコントロールから検索を続行する場合は true、それ以外の場合は false |
このメソッドをKeyDownイベントで呼出せる形でメソッド化し、 FormのKeyDownで呼出してやるか、または、フォームのコンストラクタでKeyDownイベントにハンドラとして追加してやります。
以下のソースでは、コンストラクタでKeyDownイベントにハンドラを追加しています。
Public Class Form2 '当クラスのコンストラクタ Public Sub New() ' この呼び出しはデザイナーで必要です。 InitializeComponent() ' InitializeComponent() 呼び出しの後で初期化を追加します。 '「Enter」キーでのコントロール遷移処理の設定 Me.KeyPreview = True AddHandler Me.KeyDown, AddressOf MoveNextCtrl AddHandler Me.KeyPress, AddressOf MoveNextCtrlBeepSup End Sub '「Enter」キーによるコントロールの移動メソッド Private Sub MoveNextCtrl(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Try If e.KeyCode = Keys.Enter Then Dim fProc As Boolean = True If TypeOf sender.ActiveControl Is TextBox Then If (CType(sender.ActiveControl, TextBox)).Multiline = True Then fProc = False End If End If '次のコントロールをアクティブにします。 If fProc Then 'forward: タブ オーダー内を前方に移動する場合は true。後方に移動する場合は false。 Dim forward As Boolean = e.Modifiers <> Keys.Shift sender.SelectNextControl(sender.ActiveControl, forward, True, True, True) End If End If Catch ex As Exception MsgBox("PGエラー:" & ex.ToString) End Try End Sub '「Enter」キーによるコントロールの移動メソッド時にビープ音の消音 Private Sub MoveNextCtrlBeepSup(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Try 'Enterキーが押された事を取得 If e.KeyChar = Chr(Keys.Enter) Then Dim fProc As Boolean = True If TypeOf sender.ActiveControl Is TextBox Then If (CType(sender.ActiveControl, TextBox)).Multiline = True Then fProc = False End If End If 'イベントをキャンセルでBeep音の消音 If fProc Then e.Handled = True End If End If Catch ex As Exception MsgBox("PGエラー:" & ex.ToString) End Try End Sub End Class
■「Enter」キーによるコントロールの移動メソッド時にビープ音の消音
入力コントロールで「Enter」キーを押下するとビーとBeep音がなります。 これを止めるには、KeyDownイベントで「Enter」の次のコントロール移動をした様に、 KeyPressイベントで、「Enter」キー入力時にイベント処理のキャンセルを行うことです。
=====
2016/03/14:の時の情報
PR
コメント