- ベストアンサー
VB.NETのTabControlについて
VB.NETでプログラミングをしております。 TabControlを聞かない様にするには、どうすれば良いのでしょうか ? 1つ目のタグや2つ目のタグと固定にしたいのです。 但し、Tabの中のTextBoxの入力等はしたいのです。 宜しくお願い致します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
本当は、先頭に制御可能フラグ(Boolean)を持たせて、 ・タブコントロール.Enter/Leave/Validating/Validating/SelectedIndexChanged ・タブページ.Enter/Leave/Validating などのフォーカス系/入力チェック系イベントでのフラグの制御を行い、 ・e.Cancel=制御フラグ としたいです が! タブコントロール以外にフォーカスを持たせた後、カレントではないタブをクリックすると、 1.タブコントロール.SelectedIndexChanged 2.タブコントロール.Enter という順序でイベントが発生するという大問題があります。(.NET2002でのことです。そちらの環境がわからないので、そちらで同じ動作を行うかがわかりません。) これってバグなのかな? これを回避する方法は知りませんが、直接イベントをフックさせたらできるかも?(保障なしです) 代案になりますが、タブ内のテキスト項目に正常な入力が行われていなければ絶対にフォーカスを移させないということと、ページ移動ボタンも、タブコントロール内部に設置することにより、対応可能です(苦しい代案です) さらに画面終了ボタンも内部に設置し、画面が閉じようとしている時の状態も認識する必要があります。 http://dobon.net/vb/dotnet/form/unloadmode.html 完全な回避方法を見つけた人がいたら、教えて欲しいぐらいです。^^;
その他の回答 (3)
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
>TabControl1_Validating(パラメータ[sender,e]) Handles TabControl1.SelectedIndexChanged 違います。 タブコントロールではありません。 タブコントロール内の、各タブページのValidatingです。 TabPage1_Validating(パラメータ[sender,e]) Handles TabPage1.Validating TabPage2_Validating(パラメータ[sender,e]) Handles TabPage2.Validating #1ではそれを組み合わせて(TabPage1_Validating + TabPage2_Validating) TabPages_Validating(パラメータ[sender,e]) Handles TabPage1.Validating, TabPage2.Validating としておりました。 #1であげた参考URL http://msdn.microsoft.com/smartclient/community/wffaq/ctrlsp.aspx#wjdc5o9n [How do I prevent the user from changing the selected tab page in a TabControl?] とほとんど変わりませんが、一応サンプル 'イベント/フォーム/Load Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.Show() Call TabControl1_SelectedIndexChanged(TabControl1, New System.EventArgs()) End Sub 'イベント/タブコントロール/SelectedIndexChanged Private Sub TabControl1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TabControl1.SelectedIndexChanged Me.TabControl1.TabPages(Me.TabControl1.SelectedIndex).Focus() End Sub 'イベント/タブページ[TabPage1・TabPage2]/Validating Private Sub TabPages_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TabPage1.Validating, TabPage2.Validating e.Cancel = True End Sub
お礼
ありがとうございました。成功いたしました。 ただ、もう1つお聞きしたいのですが、 これを解除するにはどうすれば良いのでしょうか ? つまり、他のタグや全く外のTextBoxに移動したいのです。何度もすみません。宜しくお願い致します。
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
>TabControl1.SelectedIndex = 0 >他のタグは選択できない なので タブページのValidatingイベントで e.Cancel = True を指定するとできます。
補足
何度も、ありがとうございます。 Private Sub TabControl1_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TabControl1.Validating e.Cancel = True End Sub と、入れたのですが、他のタグも選択できてしまい ます。宜しくお願い致します。
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
タブコントロールの中の全ての各タブページに対し [タブページ.Validating] をハンドリング http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemwindowsformscontrolclassvalidatingtopic.asp Private Sub TabPages_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TabPage1.Validating, TabPage2.Validating, TabPage3.Validating e.Cancel = True End Sub http://msdn.microsoft.com/smartclient/community/wffaq/ctrlsp.aspx#wjdc5o9n [How do I prevent the user from changing the selected tab page in a TabControl?] http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard23.htm
補足
ご回答をありがとうございます。すみません、よく解りません。 こちらの説明不足かもしれません。具体的に説明しますと [TabControl1]に、TabPage1/TabPage2 の2つのタグがあります。 ある条件で、TabControl1.SelectedIndex = 0 と、選択した状態にし、 他のタグは選択できない様にしたいのです。 宜しくお願い致します。
お礼
ありがとうございました。 >1.タブコントロール.SelectedIndexChanged を使用して解決致しました。 今度も宜しくお願い致します。