操作选项卡控件

时间:2010-10-01 15:18:49

标签: .net vb.net

我有一个带有一堆标签的表单,但我不希望它们一直都可见。 我试过了

    For Each t In TabControl1.TabPages
        t.Hide()
    Next
    TabControl1.TabPages("DateRange").Show()

为了将它们全部隐藏在doc load上,然后将.Show()隐藏在我当时想要的选项卡上,但显然不会那样,因为所有选项卡仍然可见。

然后我试了

Private tabs As TabControl.TabPageCollection

    For Each t In TabControl1.TabPages
        tabs.Add(t) ' Object reference not set to an instance of an object. '

        TabControl1.TabPages.Remove(t)
    Next
    TabControl1.TabPages.Add(tabs("DateRange"))

但我得到的标签未设置为对象的实例...如果我尝试使用

我会收到错误
tabs = New TabControl.TabPageCollection

令人沮丧的是.Hide或.Visible不做他们应该做的事。

3 个答案:

答案 0 :(得分:1)

你是在正确的道路上,而不是

Private tabs As TabControl.TabPageCollection

使用

Private tabs As New List(Of TabPage)

答案 1 :(得分:1)

当删除项目时,当索引移动时,您无法继续循环删除。

设置标签,然后通过索引或名称逐个删除它们:

tabctrl.TabPages.RemoveAt(indx)

For x = 0 To tabctrl.TabPages.Count - 1
   If tabctrl.TabPages(x).Name.Equals(tabToRemove.Name) Then
      tabctrl.TabPages.RemoveAt(x)
      Exit For
   End If
Next

答案 2 :(得分:1)

将需要隐藏的页面移动到List中是一种简单的方法。但是,当表单关闭时,也需要处理这样的隐藏页面。它不再是自动的,因为TabControl无法看到页面。你不能忽视它,忘记处理一个控件是一个永久性的泄漏。看起来像这样:

Public Class Form1
    Private hiddenPages As New List(Of TabPage)

    Friend Sub SetTabState(ByVal page As TabPage, ByVal visible As Boolean)
        If visible Then
            If TabControl1.TabPages.Contains(page) Then Exit Sub
            hiddenPages.Remove(page)
            TabControl1.TabPages.Add(page)
        Else
            If Not TabControl1.TabPages.Contains(page) Then Exit Sub
            hiddenPages.Add(page)
            TabControl1.TabPages.Remove(page)
        End If
    End Sub

    Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
        For Each page As TabPage In hiddenPages
            page.Dispose()
        Next
    End Sub
End Class