• ベストアンサー

VB.NETのTabControlについて

VB.NETでプログラミングをしております。 TabControlを聞かない様にするには、どうすれば良いのでしょうか ? 1つ目のタグや2つ目のタグと固定にしたいのです。 但し、Tabの中のTextBoxの入力等はしたいのです。 宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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 完全な回避方法を見つけた人がいたら、教えて欲しいぐらいです。^^;

m-toshi
質問者

お礼

ありがとうございました。 >1.タブコントロール.SelectedIndexChanged を使用して解決致しました。 今度も宜しくお願い致します。

その他の回答 (3)

回答No.3

>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

参考URL:
http://msdn.microsoft.com/smartclient/community/wffaq/ctrlsp.aspx#wjdc5o9n
m-toshi
質問者

お礼

ありがとうございました。成功いたしました。 ただ、もう1つお聞きしたいのですが、 これを解除するにはどうすれば良いのでしょうか ? つまり、他のタグや全く外のTextBoxに移動したいのです。何度もすみません。宜しくお願い致します。

回答No.2

>TabControl1.SelectedIndex = 0 >他のタグは選択できない なので タブページのValidatingイベントで e.Cancel = True を指定するとできます。

m-toshi
質問者

補足

何度も、ありがとうございます。 Private Sub TabControl1_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TabControl1.Validating e.Cancel = True End Sub と、入れたのですが、他のタグも選択できてしまい ます。宜しくお願い致します。

回答No.1

タブコントロールの中の全ての各タブページに対し [タブページ.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

m-toshi
質問者

補足

ご回答をありがとうございます。すみません、よく解りません。 こちらの説明不足かもしれません。具体的に説明しますと [TabControl1]に、TabPage1/TabPage2 の2つのタグがあります。 ある条件で、TabControl1.SelectedIndex = 0 と、選択した状態にし、 他のタグは選択できない様にしたいのです。 宜しくお願い致します。

関連するQ&A