2010-10-01 2 views
0

У меня есть форма с кучей вкладок, но я не хочу, чтобы все они были видны все время. Я попыталсяУправление табуляцией

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

для того, чтобы скрыть их все на док нагрузки, а затем .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

видели [это] (http://www.devnewsgroups.net/windowsforms/t12906-how-hide-tabpage-tabcontrol.aspx)? – Beth

ответ

1

Вы находитесь на правильном пути, но вместо

Private tabs As TabControl.TabPageCollection 

использования

Private tabs As New List(Of TabPage) 
+0

Похоже, это будет сделано. – AndyD273

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 
+0

Закрыть, но назад. Я хочу, чтобы все они были скрыты, а затем показывали только действительные. – AndyD273

+0

Если вы знаете, какие из них действительны до удаления, просто удалите недопустимые имена по имени, вам нужно будет использовать для каждого цикла для каждой вкладки. – HadleyHope

+0

Если вы хотите удалить их все, просто продолжайте называть tabctrl.TabPages.RemoveAt (0) – HadleyHope

1

Перемещение страницы, которая должна быть скрыта в список является простой подход. Однако такая скрытая страница также должна быть удалена, когда форма закрывается. Это не будет автоматически, так как 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 
+0

Я хотел бы узнать больше об этой проблеме с помощью TabControl. У вас есть ссылки, которые обсуждают это? –

+0

@Jay - он просто не поддерживается встроенным элементом управления Windows. Что он может сделать, описан в документах SDK, начните читать здесь: http://msdn.microsoft.com/en-us/library/ff486050%28VS.85%29.aspx –

Смежные вопросы