TabControl в TabPage

У меня возникла следующая проблема: я добавляю динамически созданный TabControl на вкладку (которая также динамически создается). Когда я пытаюсь добавить еще одну вкладку с другим tabcontrol, он действует как TabControl добавлен в новый TabPage, На самом деле это ничего не добавляет. Что я должен делать? Вот код, где я создаю TabPage:

    Dim tbstate As New TabPage
    tbstate.ContextMenuStrip = QuestEd.cmsState
    tbstate.Text = String.Format("State: {0}", txtState.Text)
    QuestEd.TabControl1.TabPages.Add(tbstate)
    txtState.Text = Nothing
    tbstate.Select()
    QuestEd.RefreshData()
    Me.Dispose()

А вот код, где я создаю новый TabControl за это TabPage

Public newtab As New TabControl
     ...
            If QuestEd.TabControl1.SelectedTab.Controls.Count = 0 Then
                newtab.Parent = QuestEd.TabControl1.SelectedTab
                newtab.Dock = DockStyle.Fill
                QuestEd.TabControl1.SelectedTab.Controls.Add(newtab)
                QuestEd.TabControl1.SelectedTab.Refresh()
                newtab.TabPages.Add(String.Format("When: {0}", typ))
            Else
                newtab.TabPages.Add(String.Format("When: {0}", typ))
            End If

Что я делаю не так? Может кто-нибудь подсказать, как это исправить? заранее спасибо

1 ответ

Решение

Просто провел быструю проверку вашего кода. Я предполагаю, что, поскольку у вас есть публичное представление о вашем новом вкладке, вы объявляете его на уровне класса. Ваш код работает, он добавляет новый TabControl на TabPage. Читая комментарий Ханса, он, скорее всего, прав в том, что происходит. Если вы используете имя класса формы вместо имени экземпляра, вы ничего не увидите. Если вы пытаетесь добавить эти элементы управления из другой формы, вам нужно будет передать экземпляр формы, в которую вы добавляете его. Не видя, как вы структурируете свой проект, это просто дикое предположение.

Мой пример:

Public Class Form1
    Dim newtab As New TabControl
    Dim typ As String = "Hello"
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim tbstate As New TabPage
        Dim tbstate1 As New TabPage
        tbstate.Text = String.Format("State: {0}", "My Test")
        TabControl1.TabPages.Add(tbstate)
        TabControl1.TabPages.Add(tbstate1)
        tbstate.Select()

    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        If TabControl1.SelectedTab.Controls.Count = 0 Then
            newtab = New TabControl
            newtab.Parent = TabControl1.SelectedTab
            newtab.Dock = DockStyle.Fill
            TabControl1.SelectedTab.Controls.Add(newtab)
            TabControl1.SelectedTab.Refresh()
            newtab.TabPages.Add(String.Format("When: {0}", typ))
        Else
            DirectCast(TabControl1.SelectedTab.Controls(0), TabControl).TabPages.Add(New TabPage(String.Format("When: {0}", typ)))            End If
    End Sub
End Class
Другие вопросы по тегам