- ベストアンサー
タブ移動で最後のTabIndexまで行くと頭から繰り返さないようにする方法
- VB.NET環境において、タブ移動で最後のTabIndexまでカーソルが行くと、繰り返しを止める方法を教えてください。
- また、逆タブ(Shift+Tab)を押すと、最初のTabIndexのコントロールまでバックさせる方法も教えてください。
- 現在はEnterキーを使用してタブ移動させていますが、他に良い方法があれば教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは、じゃんぬねっと です。 Tab の捕捉について解答します。 Tab キーの捕捉は ProcessDialogKey などをオーバーライドしてください。 # 他にも方法はありますが。
その他の回答 (1)
- JeanneNet
- ベストアンサー率48% (100/208)
こんにちは、じゃんぬねっと です。 > Me.SelectNextControl(Me.ActiveControl, forward, True, True, True) 最後の引数を False にするだけですよね。 Tab キーの捕捉時を同じ様にすれば良いわけです。 > 逆タブ(Shift+Tab)を押すと、TabIndexをさかのぼって、最初のTabIndexのコントロールまでバックさせたいです。 これは実装するしかないですね。 単純に TabIndex を見るのか、何かのプロパティに格納するかなどすると良いでしょう。 最終的なコントロールの位置も同様の実装が必要です。
補足
ご回答ありがとうございます。 Enterキーを使ってのタブ移動は、SelectNextControlの最後の引数を False にするだけで、実現できました。 ただ、Tabキーを使ったタブ移動も、同じようにしたいのですが。 Case文に、Keys.Tabを追加してみましたが、Tabキー押下時のイベントが発生しても、Case Keys.Tab には飛んでくれないようです。 Tabキー押下時のイベントは、何か別な方法で取得しなければなりませんかね? 最初のTabIndexと最後のTabIndexを見て、タブ移動を止める処理を追加するとしても、Tabキー押下時のイベントが取れないと実現できないのかな・・と思いまして。 ・ ・ ・ Case Keys.Tab Dim bThrough As Boolean = False If TypeOf Me.ActiveControl Is Edit Then If (CType(Me.ActiveControl, Edit)).Multiline = True Then bThrough = True End If End If If bThrough = False Then Dim forward As Boolean = e.Modifiers <> Keys.Shift 'this.ProcessTabKey(forward); Me.SelectNextControl(Me.ActiveControl, forward, True, True, False) End If ・ ・ ・
お礼
ありがとうございました! 以下のコードを入れることで、Case Keys.Tab を通過するようになりました。 Protected Overrides Function ProcessDialogKey(ByVal Tab As Keys) As Boolean End Function