こんにちは。VB2008のタブコントロールを使って各ページにいろいろなコントロールを貼り付けていますが、
たとえばタブコントロールにタブ1〜タブ5といったタブページがあったとして、
・タブ1・タブ4・タブ5は常に表示
・ある条件ではタブ2を表示し、タブ3は非表示
・ある条件ではタブ3を表示し、タブ2は非表示
・上記条件は何かのタイミングで切り替えを行う。
ということをやりたい場合、どのようにしてタブ2とタブ3を差し替えればよいでしょうか?
とりあえず、
・タブ2を表示・タブ3を非表示にしたい場合
タブコントロールのClearメソッドですべてのタブページをタブコントロールから除き、タブ1・2・4・5をタブコントロールにAddする
・タブ2を非表示・タブ3を表示にしたい場合
タブコントロールのClearメソッドですべてのタブページをタブコントロールから除き、タブ1・3・4・5をタブコントロールにAddする
という方法で実現できそうですが、もっとスマートなやり方はないでしょうか?
よろしくお願い申し上げます。
全部を Clear するのではなく、該当タブのみを入れ替えるとか。
Private Sub CheckBox1_CheckedChanged(ByVal sender As Object, ByVal e As EventArgs) Handles CheckBox1.CheckedChanged
Dim preTab = TabControl1.SelectedIndex
TabControl1.SuspendLayout()
TabControl1.TabPages.Remove(TabPage2)
TabControl1.TabPages.Remove(TabPage3)
If CheckBox1.Checked Then
TabControl1.TabPages.Insert(1, TabPage3)
Else
TabControl1.TabPages.Insert(1, TabPage2)
End If
TabControl1.SelectedIndex = preTab
TabControl1.ResumeLayout()
End Sub
魔界の仮面弁士様、ご回答ありがとうございました。
ご提案頂いたコードを参考に、以下のようにしてみました。
(タブを配置しているフォームのインスタンスを作成するときに上記のコードを適用すると、
フォームが表示されたときにタブ2とタブ3がいずれも表示されなかったので、タブをRemoveするタイミングを以下のように変更しました。)
Dim preTab = TabControl1.SelectedIndex
TabControl1.SuspendLayout()
If CheckBox1.Checked Then
TabControl1.TabPages.Remove(TabPage2)
TabControl1.TabPages.Insert(1, TabPage3)
Else
TabControl1.TabPages.Remove(TabPage3)
TabControl1.TabPages.Insert(1, TabPage2)
End If
TabControl1.SelectedIndex = preTab
TabControl1.ResumeLayout()
ところで、SuspendLayout()とResumeLayout()を行う理由は何でしょうか?
いろいろと調べてみましたが、難しい言葉があったり、具体的な説明を探すに至りませんでした。
ツイート | ![]() |