tab移動について


TOTO  2003-04-22 16:34:39  No: 106838  IP: [192.*.*.*]

Option1ボタンにいる時TABを押したとき
Option2ボタンにいどうするにはどうすればいいのですか。

編集 削除
nanashi  2003-04-22 16:58:37  No: 106839  IP: [192.*.*.*]

出来ないことはないですが処理が面倒臭くなりますよ。

方法1.
  オプションボタンをそれぞれ別のコンテナに突っ込む。
  一つ一つが別のグループのオプションボタンだと認識されるので各オプションボタンのClickイベントで
  同じグループのオプションボタンを自分以外全てFalseに変更する必要がある。
  (そうしないとオプションボタンの役割を果たさなくなる)

方法2.
  フォームのKeyPreviewをTrueにし、フォーム上の全てのオブジェクトのTabStopをFalseにして
  全てのTab移動を自力で行う。


他のやり方を知ってる方、フォローお願いしますm(_ _)m

編集 削除
R&K  2003-04-22 17:53:10  No: 106840  IP: [192.*.*.*]

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

編集 削除
nanashi  2003-04-22 18:10:40  No: 106841  IP: [192.*.*.*]

通常TABキーはKeyDown、KeyPress、KeyUpイベントでは取得できません。

フォーム上の全てのコントロールのTabStopがFalseになっているか、
オプションボタン(全て同じグループ)以外フォーカスを持てるコントロールがないならTABキーも取得は出来ますが。

編集 削除
R&K  2003-04-22 18:25:16  No: 106842  IP: [192.*.*.*]

nanashiさんへ

そうですか〜、テストしたときはオプションボタン
だけだったからか。ありがとうございます。

あ、キーフックでタブキーが押されたことを取得するってのは
どうでしょうか?でも、やっぱり面倒くさそうですねぇ。

編集 削除
マッシュ  2003-04-23 20:12:09  No: 106843  IP: [192.*.*.*]

TabIndexプロパティじゃ駄目ですか?
値が小さい順に移動しますが。

編集 削除
ぢゃわ  2003-04-24 17:31:40  No: 106844  IP: [192.*.*.*]

ひとつのオプションボタンにフォーカスが当たった時点で
同じグループのほかのオプションボタンの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

編集 削除
ぢゃわ  2003-04-24 17:45:51  No: 106845  IP: [192.*.*.*]

自己補足でスミマセン。
GotForcusイベントはクリックでオプションボタンに
フォーカス移動した場合には処理されないようです。
Clickイベントでも同様の処理をする必要があるようです。

編集 削除
nanashi  2003-04-24 18:11:02  No: 106846  IP: [192.*.*.*]

おー、スゲーッ!!
この方法は全く知りませんでした、というより

> ひとつのオプションボタンにフォーカスが当たった時点で
> 同じグループのほかのオプションボタンのTabStopはFalseに
> 設定されるようです。

この事実を初めて知りました。
ありがとうございます、今後の参考にさせて頂きます。

編集 削除