タブオーダーについて

タグの編集
投稿者 うめ  (社会人) 投稿日時 2009/2/18 00:11:28
はじめまして。
いつもお世話になっております。
タブオーダーの件で質問させてください。

VB2005で開発を行っています。

フォーム上にパネル1とパネル2を配置し、
パネル1にコマンドボタン1、コマンドボタン2
パネル2にコマンドボタン3を配置するような画面があったとして、
タブキーで押下で

コマンドボタン1→コマンドボタン3→コマンドボタン2

と動くようにプロパティ等ですることは可能でしょうか。
タブオーダーの順をいくらいじっても、片方のパネルの中身を移動し終えないと、
もう片方のパネルに進んでくれないようなのです。
こちらのサイトで、Zオーダーとの絡みもある、とあったので、
やはりパネル間飛び越えは、単にプロパティ等をいじるだけではだめなのでしょうか。

もしできなければ、コマンドボタン1のキープレスイベントのtabが押されたときか何かでコマンドボタン2に飛ばすような処理を入れようと考えているのですが、

もし別の良い方法があるならば、お教えください。

意味がわからないところ等ありましたら、できる限り補足いたしますので、ご助言、お願いします。
投稿者 るきお  (社会人) 投稿日時 2009/2/18 08:57:27
こんにちは。

Panel越えは考えた事ありませんでしたが、確かにできないですね。
余分なコントロールのTabStopをFalseにするわけにはいきませんか?

>もしできなければ、コマンドボタン1のキープレスイベントのtabが押されたときか何かでコマンドボタン>2に飛ばすような処理を入れようと考えているのですが、
>もし別の良い方法があるならば、お教えください。
たしかに直接制御は極力避けたいですね。

複数のPanelをジャンプするタブ順という仕様を見直すか、Panelを使わないかというのが
技術的には正攻法かもしれません。

まずは余分なコントロールのTabStopをFalseにすることからご検討ください。
投稿者 うめ  (社会人) 投稿日時 2009/2/18 23:17:47
るきおさん、ありがとうございます。

結局、TabIndexを

パネル1=0

コマンドボタン1=1
コマンドボタン3=0

パネル2=1

コマンドボタン2=0

のように設定して、フォームをロードしたときにフォーカスをコマンドボタン1にあてることで、
望みどおりの結果を出すことに成功しました。

ただ、ボタンの配置によっては、この方法ではうまくいかないことも多々ありそうですね・・・。
TabStopをFalseにするという案は、考えつきませんでした。ありがとうございます。
後々使えるように、自分の引き出しにしまっておこうと思います。

私もできることなら、複数のPanelをジャンプすることを避けたかったのですが、
既存ありきの刷新作業であったため、なかなか・・・(^^;)

何の知識も無い状態でこのような仕事についてから今まで、本当にこのサイトにはお世話になっています。
わかりやすくて、本当に助かっています。ありがとうございます!
投稿者 るしぇ  (社会人) 投稿日時 2009/2/19 02:34:26
コマンドボタン3
コマンドボタン1
コマンドボタン2
の順で TAB 移動するようにしたということですか。。。
TAB 移動は左上から順にしておくのが標準的なルールですので
ボクなら NG を出しますが。。。
最後まで TAB 移動して2週目の動きは問題ないのですか?

以前、弁さんが(パネルに配置しないで)パネルの上に重ねる
という方法を紹介していました。
http://bbs.wankuma.com/index.cgi?mode=al2&namber=7696&KLOG=19

ただ、これも万能ではなく、パネルごと Enabled 制御するとかに
なるとまた考え直す必要があります。

やはり、パネルを飛び越えるという標準的なルールから外れた
仕様を考え直すことから始めます。最終的にオリジナルな動きは
オリジナルのコードを書いてカスタマイズすることになりますね。
投稿者 うめ  (社会人) 投稿日時 2009/2/20 18:30:22
るしぇさん

返事が遅くなってしまってすいません。

とりあえず、自分の作成しているプログラムでは、2週目以降も問題なく動作しております。が、

ご指摘ごもっともです。
既存(VB6)の動きと、新しいほう(VB2005)の動きと、機能と、デザインと、色々な兼ね合いがあって結局そんな結果になってしまったのですが、
パネルの上に重ねるという方法をとれば、デザイン上の問題はクリアできそうですね・・・。
今回は、デザインの部分に他のプログラムと共通のFormクラスを使用しているので自分のところだけ手を入れるというのがちょっと難しいのですが、やはり次回からの参考にさせていただきます。ありがとうございました。