Enterキーを押した場合に次のコントロールにフォーカスを移動する方法について説明する。
この処理を行う場合には、以下を利用することになる。
・各コントロールのKeyDownイベント
・フォームのSelectNextControl()メソッド
(フォームのProcessTabKey()メソッドでも可能)
以下、テキストボックスでEnterキーを押した場合のサンプル。
この処理を行う場合には、以下を利用することになる。
・各コントロールのKeyDownイベント
・フォームのSelectNextControl()メソッド
(フォームのProcessTabKey()メソッドでも可能)
以下、テキストボックスでEnterキーを押した場合のサンプル。
Public Class Form1
Inherits System.Windows.Forms.Form
:(中略)
Private Sub TextBox1_KeyDown(ByVal sender As Object, _
ByVal e As System.Windows.Forms.KeyEventArgs) _
Handles TextBox1.KeyDown
'Enterキーは、Tabキーと逆順にフォーカスを移動する
'そのため、第2引数のForwordは、Trueにすると後方検索になる
If e.KeyCode = Keys.Enter Then
Me.SelectNextControl(Me.ActiveControl, True, _
True, True, True)
End If
End Sub
End Class
上記のサンプルでは、全てのコントロールのKeyDownイベントに同じコードを記載しなければならない。
コントロール数が多くなると厳しいので、もっと簡単にする方法を説明する。
それには、以前の記事「キーを押した時にボタンのクリックイベントを発生させる」で説明したフォームのKeyDownイベントを利用すれば良い。
その場合には、以下を利用することになる。
・フォームのKeyDownイベント
・フォームのSelectNextControl()メソッド
(フォームのProcessTabKey()メソッドでも可能)
・フォームのKeyPreviewプロパティをTrueに変更する
以下、サンプル。
Public Class Form1
Inherits System.Windows.Forms.Form
:(中略)
Private Sub BaseForm_KeyDown(ByVal sender As Object, _
ByVal e As System.Windows.Forms.KeyEventArgs) _
Handles MyBase.KeyDown
If e.KeyCode = Keys.Enter Then
Dim blnNext As Boolean = False
'複数行入力可能なコントロールは、フォーカスが移動しないように制御
If TypeOf Me.ActiveControl Is TextBox Then
If CType(Me.ActiveControl, TextBox).Multiline = True Then
blnNext = True
End If
ElseIf TypeOf Me.ActiveControl Is RichTextBox Then
blnNext = True
End If
'次のコントロールへフォーカスを移動する
If blnNext = False Then
Me.SelectNextControl(Me.ActiveControl, True, _
True, True, True)
End If
End If
End Sub
End Class
【補足事項】
・一部のコントロールでは、Enterキーを入力値として扱う。
この場合には、フォーカスを移動しないように制御する必要がある。
・WindowsでEnterキーを押した場合の通常のフォーカス移動は、Tabキーを押した場合の逆順となる。
・Tabキーは、1つ後のコントロールにフォーカスを移す。
・Enterキーは、1つ前のコントロールにフォーカスを移す。
・要望が多いようであれば、ユーザ定義コントロールとして拡張フォームを用意すれば良い。
Inherits System.Windows.Forms.Form
:(中略)
Private Sub TextBox1_KeyDown(ByVal sender As Object, _
ByVal e As System.Windows.Forms.KeyEventArgs) _
Handles TextBox1.KeyDown
'Enterキーは、Tabキーと逆順にフォーカスを移動する
'そのため、第2引数のForwordは、Trueにすると後方検索になる
If e.KeyCode = Keys.Enter Then
Me.SelectNextControl(Me.ActiveControl, True, _
True, True, True)
End If
End Sub
End Class
上記のサンプルでは、全てのコントロールのKeyDownイベントに同じコードを記載しなければならない。
コントロール数が多くなると厳しいので、もっと簡単にする方法を説明する。
それには、以前の記事「キーを押した時にボタンのクリックイベントを発生させる」で説明したフォームのKeyDownイベントを利用すれば良い。
その場合には、以下を利用することになる。
・フォームのKeyDownイベント
・フォームのSelectNextControl()メソッド
(フォームのProcessTabKey()メソッドでも可能)
・フォームのKeyPreviewプロパティをTrueに変更する
以下、サンプル。
Public Class Form1
Inherits System.Windows.Forms.Form
:(中略)
Private Sub BaseForm_KeyDown(ByVal sender As Object, _
ByVal e As System.Windows.Forms.KeyEventArgs) _
Handles MyBase.KeyDown
If e.KeyCode = Keys.Enter Then
Dim blnNext As Boolean = False
'複数行入力可能なコントロールは、フォーカスが移動しないように制御
If TypeOf Me.ActiveControl Is TextBox Then
If CType(Me.ActiveControl, TextBox).Multiline = True Then
blnNext = True
End If
ElseIf TypeOf Me.ActiveControl Is RichTextBox Then
blnNext = True
End If
'次のコントロールへフォーカスを移動する
If blnNext = False Then
Me.SelectNextControl(Me.ActiveControl, True, _
True, True, True)
End If
End If
End Sub
End Class
【補足事項】
・一部のコントロールでは、Enterキーを入力値として扱う。
この場合には、フォーカスを移動しないように制御する必要がある。
・WindowsでEnterキーを押した場合の通常のフォーカス移動は、Tabキーを押した場合の逆順となる。
・Tabキーは、1つ後のコントロールにフォーカスを移す。
・Enterキーは、1つ前のコントロールにフォーカスを移す。
・要望が多いようであれば、ユーザ定義コントロールとして拡張フォームを用意すれば良い。
- カテゴリ:
- VB.NET