タブページの非表示または差し替えを行うには?


くさやん  2009-08-20 01:23:35  No: 146223

こんにちは。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する
という方法で実現できそうですが、もっとスマートなやり方はないでしょうか?
よろしくお願い申し上げます。


魔界の仮面弁士  2009-08-20 09:01:25  No: 146224

全部を 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


くさやん  2009-08-20 18:10:50  No: 146225

魔界の仮面弁士様、ご回答ありがとうございました。
ご提案頂いたコードを参考に、以下のようにしてみました。
(タブを配置しているフォームのインスタンスを作成するときに上記のコードを適用すると、
フォームが表示されたときにタブ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()を行う理由は何でしょうか?
いろいろと調べてみましたが、難しい言葉があったり、具体的な説明を探すに至りませんでした。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加