我有一个带有一堆标签的表单,但我不希望它们一直都可见。 我试过了
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不做他们应该做的事。
答案 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