Enter キーによるフォーカス移動の改良版 (2個) (SNo.043) 1.SendKeys.Send メソッド を使った方法(Shift + Enter で逆方向に移動) 2.Control.SelectNextControl メソッド を使った方法(Shift + Enter で逆方向に移動) |
|
使用コントロール | TextBox を数個 |
その他条件 | WindowsXP(Vista) Visual Basic 2005(VB2008) |
1.SendKeys.Send メソッド を使った方法(Shift + Enter で逆方向に移動)
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load '別途 Form1のプロパティで設定してもOKです。 Me.KeyPreview = True End Sub Private Sub Form1_KeyPress(ByVal sender As Object, ByVal e As _ System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress 'SendKeys.Send メソッド を使った方法(Shift + Enter で逆方向に移動) 'Enterキーが押された事を取得 If e.KeyChar = Chr(Keys.Enter) Then e.Handled = True 'KeyPress イベントをキャンセルしBeep音を消音に SendKeys.Send(Constants.vbTab) End If End Sub |
|
2.Control.SelectNextControl メソッド を使った方法(Shift + Enter で逆方向に移動) Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load '別途 Form1のプロパティで設定してもOKです。 Me.KeyPreview = True End Sub Private Sub Form1_KeyPress(ByVal sender As Object, ByVal e As _ System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress 'Enterキーが押された事を取得 If e.KeyChar = Chr(Keys.Enter) Then e.Handled = True 'KeyPress イベントをキャンセルしBeep音を消音に End If End Sub Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As _ System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown 'Control.SelectNextControl メソッド を使った方法(Shift + Enter で逆方向に移動) If e.KeyCode = Keys.Enter Then If e.Control = False Then Me.SelectNextControl(Me.ActiveControl, Not e.Shift, True, True, True) End If End If End Sub |
|
Form1_KeyPress イベント1箇所で処理する事によって、個々のコントロールでの処理が不要となり、多くのコントロールに設定する場合に便利かと思います。 その他、上記同様にアクティブコントロールを利用した方法や Win32 API 関数を使った方法があります。 又、下記サンプル投稿用掲示板の方にも最新版を投稿しております。 http://hanatyan.sakura.ne.jp/patio/read.cgi?mode=view2&f=334&no=18 |