Visual Basic サンプル集 |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Visual Basic 中学校 > Visual Basic サンプル集 > Visual Basic サンプル集目次 >
タブコントロールのページを非表示にする
1.タブページの表示・非表示を切り替える例
前提
フォームにTabControl1という名前のページを2つ以上含むタブコントロールが貼り付けられている。
Button1をクリックすると2番目のタブページを表示します。Button2をクリックすると非表示にします。
このサンプルに登場するTabControlAdapterクラスは汎用で使用できます。このままコピー・貼り付けしてください。
フォーム側ではクラスレベルの変数としてTabControlAdapterを宣言してください。下記の例では変数名はadapterです。そして、初期の段階でインスタンス化してください。この例ではForm1_Shownでインスタンス化しています。








Public
Class Form1 Dim adapter As TabControlAdapter Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown adapter = New TabControlAdapter(Me.TabControl1) End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click '2番目のページを表示します。 adapter.PageVisible(1) = True End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click '2番目のページを非表示にします。 adapter.PageVisible(1) = False End Sub End Class ''' <summary> ''' タブコントロールの各ページの表示・非表示を切り替えます。 ''' インスタンス生成時点で存在していたページだけが対象です。 ''' 後からページを追加・削除する場合は、追加・削除した後にインスタンスを再生成してください。 ''' 次の例は2つ目のページを非表示にします。 ''' <para> ''' Dim adapter As TabControlAdapter ''' adapter = New TabControlAdapter(Me.TabControl1) 'インスタンス生成 ''' adapter.PageVisible(1) = False ''' </para> ''' </summary> Public Class TabControlAdapter Private Property TabControl As TabControl ''' <summary>インスタンス生成時に存在したページです。非表示状態のページも保持します。</summary> Public Property TabPages As List(Of TabPage) ''' <summary>対応するTabPagesの各ページが表示されているかいないかを示します。</summary> Private Property Visibles As List(Of Boolean) Public Sub New(tabControl As TabControl) Me.TabControl = tabControl Me.TabPages = New List(Of TabPage) Me.Visibles = New List(Of Boolean) For i As Integer = 0 To tabControl.TabPages.Count - 1 TabPages.Add(tabControl.TabPages(i)) Visibles.Add(True) Next End Sub ''' <summary> ''' ページの表示・非表示を設定します。 ''' </summary> ''' <param name="page"></param> ''' <returns></returns> Default Public Property PageVisible(page As TabPage) As Boolean Get For index As Integer = 0 To TabPages.Count - 1 If TabPages(index) Is page Then Return Visibles(index) End If Next Throw New ArgumentOutOfRangeException("存在しないタブページです。") End Get Set(value As Boolean) For index As Integer = 0 To TabPages.Count - 1 If TabPages(index) Is page Then Me.PageVisible(index) = value Return End If Next End Set End Property ''' <summary> ''' 番号を使って指定したページの表示・非表示を設定します。 ''' </summary> ''' <param name="index"></param> ''' <returns></returns> Default Public Property PageVisible(index As Integer) As Boolean Get Return Visibles(index) End Get Set(value As Boolean) If Visibles(index) = value Then Return End If Visibles(index) = value Refresh() End Set End Property ''' <summary> ''' 実際にページの表示・非表示を切り替えます。 ''' </summary> Private Sub Refresh() For i As Integer = Visibles.Count - 1 To 0 Step -1 Dim visible As Boolean = Visibles(i) Dim page As TabPage = TabPages(i) TabControl.TabPages.Remove(page) If (visible) AndAlso (TabControl.TabPages.Contains(page) = False) Then TabControl.TabPages.Insert(0, page) End If Next End Sub End Class |
タブページの表示・非表示を切り替える手段は標準では提供されていないためこのように自作する必要があります。
タブコントロールは初期の.NETの実装引きずっており、少し扱いにくいです。そのためプログラムも長くなってしまいました。