- 題名: フォーカスの維持
- 日時: 2004/09/07 17:17:37
- ID: 6048
- この記事の返信元:
- (なし)
- この記事への返信:
- [6050] Re[1]: フォーカスの維持2004/09/07 17:53:48
- [6052] Re[1]: フォーカスの維持2004/09/07 19:28:01
- ツリーを表示
すいません、勝手に[Enter]キーだけの前提で話をしていました。
もし[Tab]キーも加味するのであれば、横着ですが以下のようになります。
' ==================================================================================
' [Tab]キーをKeyDownイベントで掴めるようにするためにオーバーライド
Protected Overrides Function ProcessDialogKey(ByVal uKeyData As Keys) As Boolean
Select Case uKeyData
Case Keys.Tab, Keys.Tab Or Keys.Shift
Return False
End Select
MyBase.ProcessDialogKey(uKeyData)
End Function
' ここで自分で次のコントロールに遷移してやり、キーイベントを終わったことにしてしまう
Private Sub FormMain_KeyDown(ByVal sender As Object, ByVal e As KeyEventArgs) Handles MyBase.KeyDown
Select Case e.KeyCode
Case Keys.Tab, Keys.Enter
Me.SelectNextControl(Me.ActiveControl, Not e.Shift, True, True, False)
e.Handled = True
End Select
End Sub
' ==================================================================================
また、ProcessDialogKey()をオーバーライドしているのですから、
以下のようにすれば、上記のKeyDown()イベントは"必要なし"です。
' ==================================================================================
Protected Overrides Function ProcessDialogKey(ByVal uKeyData As Keys) As Boolean
Select Case uKeyData
Case Keys.Tab, Keys.Enter
Me.SelectNextControl(Me.ActiveControl, True, True, True, False)
uKeyData = Keys.None
Case Keys.Tab Or Keys.Shift, Keys.Enter Or Keys.Shift
Me.SelectNextControl(Me.ActiveControl, False, True, True, False)
uKeyData = Keys.None
End Select
MyBase.ProcessDialogKey(uKeyData)
End Function
' ==================================================================================
またどちらの例も、
・最後のコントロール → [Tab] → 遷移しない
・最初のコントロール → [Shift]+[Tab] → 遷移しない
なので、最初のコントロールから最後のコントロールの遷移を許可する場合は、
・Me.SelectNextControl(Me.ActiveControl, False, True, True, e.Shift)
とします。
分類:[.NET]
フォーカスを維持するためにはどうすればよいのでしょうか。
例えば3つのテキストボックスがあり、初期設定では1つめのテキストボックスにフォーカスがあるとします。Enterキーを押すことによって2つめのテキストボックス、3つめのテキストボックス、1つめのテキストボックス…というようにフォーカスが移動するようになってるとします。この状態から今度は3つめのテキストボックスへフォーカスしたら、次にEnterキーを押してもフォーカスが1つめに移動しないように、つまり、3つめのテキストボックスにフォーカスを維持したいのですがどのようなコードを書けばよいのでしょうか?どなたか助けをお貸し下さい。