Option1ボタンにいる時TABを押したとき
Option2ボタンにいどうするにはどうすればいいのですか。
出来ないことはないですが処理が面倒臭くなりますよ。
方法1.
オプションボタンをそれぞれ別のコンテナに突っ込む。
一つ一つが別のグループのオプションボタンだと認識されるので各オプションボタンのClickイベントで
同じグループのオプションボタンを自分以外全てFalseに変更する必要がある。
(そうしないとオプションボタンの役割を果たさなくなる)
方法2.
フォームのKeyPreviewをTrueにし、フォーム上の全てのオブジェクトのTabStopをFalseにして
全てのTab移動を自力で行う。
他のやり方を知ってる方、フォローお願いしますm(_ _)m
KeyPressイベントでKeyAsciiがvbTabだったら
Option2をSetFocusするのは駄目でしょうか?
それぞれのOptionButtonがコントロール配列
の場合には、Indexを指定してSetFocusすれば
一応それっぽくなりますよね?
こんな感じですか?
Private Sub Option1_KeyPress(Index As Integer, KeyAscii As Integer)
If KeyAscii = vbTab Then Option2(0).SetFocus
End Sub
Private Sub Option2_KeyPress(Index As Integer, KeyAscii As Integer)
If KeyAscii = vbTab Then Option1(0).SetFocus
End Sub
通常TABキーはKeyDown、KeyPress、KeyUpイベントでは取得できません。
フォーム上の全てのコントロールのTabStopがFalseになっているか、
オプションボタン(全て同じグループ)以外フォーカスを持てるコントロールがないならTABキーも取得は出来ますが。
nanashiさんへ
そうですか〜、テストしたときはオプションボタン
だけだったからか。ありがとうございます。
あ、キーフックでタブキーが押されたことを取得するってのは
どうでしょうか?でも、やっぱり面倒くさそうですねぇ。
TabIndexプロパティじゃ駄目ですか?
値が小さい順に移動しますが。
ひとつのオプションボタンにフォーカスが当たった時点で
同じグループのほかのオプションボタンのTabStopはFalseに
設定されるようです。
なので、各オプションボタンのGotForcusイベント内で、
同グループのオプションボタン全てについてTabIndexを
Trueに設定し直してあげればTab移動できるようになります。
オプションボタンがコントロール配列なら
Private Sub Option1_GotFocus(Index As Integer)
For i = 0 To Option1.UBound
Option1(i).TabStop = True
Next
End Sub
という感じでいいのですが、質問の通りOption1、Option2
と別名になっているのであれば、それぞれのオプションボタンの
GotForcusイベントについて記述する必要があると思います。
Private Sub Option1_GotFocus()
Option2.TabStop = True
End Sub
Private Sub Option2_GotFocus()
Option1.TabStop = True
End Sub
自己補足でスミマセン。
GotForcusイベントはクリックでオプションボタンに
フォーカス移動した場合には処理されないようです。
Clickイベントでも同様の処理をする必要があるようです。
おー、スゲーッ!!
この方法は全く知りませんでした、というより
> ひとつのオプションボタンにフォーカスが当たった時点で
> 同じグループのほかのオプションボタンのTabStopはFalseに
> 設定されるようです。
この事実を初めて知りました。
ありがとうございます、今後の参考にさせて頂きます。
ツイート | ![]() |