- - PR -
複数のコントロールに同じタブインデックスを割当てたい
1
投稿者 | 投稿内容 | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-07-03 15:59
VB2005です。
TextBoxA(txtA)とTextBoxB(txtB)とTextBox1(txt1)があります。 txtAとtxtBからtabキーを押したときに、どちらから押してもtxt1に移動するようにしたいのですが なぜかうまくいきません。 それぞれのタブインデックスは、コントロールを配置したときには txtAが0、txtBが1、txt1が2 ですのでこれをプロパティで txtAが0、txtBが0、txt1が2 に直しました。 txtAからtabキーを押すとtxt1に移動します。ですがtxtBから押すとなぜかtxtAに移動します。 タブインデックスのプロパティを変更するだけでは駄目なのでしょうか? | ||||||||||||||||||||||||
|
投稿日時: 2008-07-03 16:42
こんにちは。
この挙動の理由は Control.TabIndex プロパティ に載っています。 なので、
これを実現するためには TextBoxA(txtA)と TextBoxB(txtB)とに KeyUp イベントなりで TextBox1(txt1)に Control.Focus する処理を書く必要があります。 _________________ 上本亮介 (ue) @ わんくま同盟 Microsoft MVP for VSTO (Jul 2008 - Jun 2009) Hello Another World! .NET 勉強会 / ヒーロー島 | ||||||||||||||||||||||||
|
投稿日時: 2008-07-03 16:51
ところで、以下の場合はどういう順序で移動するのでしょうか?
・txt1から、Shift+Tabキーで逆順に辿る ・TabIndexが最も大きいコントロールから、Tabキーでさらに移動する | ||||||||||||||||||||||||
|
投稿日時: 2008-07-03 16:51
こんにちは。
もしくはEnterイベントでお互いのTabStopプロパティを操作するとか。 | ||||||||||||||||||||||||
|
投稿日時: 2008-07-03 17:02
TabIndex で制御するのは保守性に欠けるので、ProcessTabKey メソッドでもオーバーライドして制御した方がマシかなぁと思います。 txtA ~ txtC を UserControl コンテナに入れて UserControl に一任すると面白いかもしれません。
_________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||||||||||
|
投稿日時: 2008-07-03 18:14
みなさんありがとうございます。返信させていただきます。
最初上記のコードで行っていたのですが、txt1からtabキーを押したときに txtAにフォーカスが移って、すぐtxt1にフォーカスが移ってしまいました。 多分もうひとつなにか記述すればよいとは思うのですが...
txt1から、Shift+Tabキーで逆順に辿る場合は、txtAにフォーカスが移ればよいです。 顧客いわくtxtBはマウスで直接移ればよいらしいので。 TabIndexが最も大きいコントロールから、Tabキーでさらに移動する場合は、単純に一番小さいコントロールに移ればよいです。 (コントロールが5つあって、TabIndexが5のコントロールから1のコントロールに移る、といった感じです。)
最終的にはこちらにしました。上でも書きましたが、txtBにはTabではなくマウスで移ればよいらしいので。
今回は実装していませんが(理解できてないというのもありますがw)このことについてはまた自分で調べてみます。 みなさん助言ありがとうございました。 | ||||||||||||||||||||||||
|
投稿日時: 2008-07-03 19:42
こんにちは。
もう解決した雰囲気に口を挟むのもなんですが、chelseaさんのおっしゃる仕様であればTab順を txtA txtB txt1 にして、txtBのTabStopプロパティをFalseにすればOKじゃないですか? |
1