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
コメント