- 題名: フォーカスの維持
- 日時: 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つめのテキストボックスにフォーカスを維持したいのですがどのようなコードを書けばよいのでしょうか?どなたか助けをお貸し下さい。