Как добавить новые вкладки в TabControl и иметь возможность обновлять элементы управления в них? - PullRequest
1 голос
/ 12 августа 2011

Мне нужно иметь возможность программно создавать новые вкладки в TabControl, добавлять к ним элементы управления и иметь возможность обновлять элементы управления на каждой вкладке из другой функции.У меня уже есть функция добавления вкладок к элементу управления и добавления элементов управления к этим вкладкам при их создании, но я застрял, чтобы обновить элементы управления после их создания.

РЕДАКТИРОВАТЬ: ЭтоЧто я должен сделать вкладки и добавить элементы управления:

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

    Dim tabpage As New TabPage
    tabpage.Text = "(empty)"

    Dim textbox1 As New TextBox
    Dim textbox2 As New TextBox

    textbox1.Parent = tabpage
    textbox2.Parent = tabpage

    textbox1.Location = New Point(10, 10)
    textbox2.Location = New Point(10, 30)

    TabControl1.TabPages.Add(tabpage)

End Sub

Ург.Кажется, я не могу вернуться в аккаунт, который использовал для публикации этого вопроса, поэтому я должен опубликовать свой ответ на вопрос Тима в комментариях к предыдущему ответу как новый ответ.Debug.WriteLine(TabControl1.TabPages.Item(2).Controls.Find("textbox1", True).Count) возвращает 0. Вкладка и элементы управления были созданы ранее.

Ответы [ 2 ]

1 голос
/ 24 апреля 2012

Я знаю, что это старый, но просто мнение, напишите функцию, которая создает AND и возвращает элемент управления, который вы хотите добавить на вкладку.В этом случае у вас будет под рукой ссылка на элемент управления.Например:

Public Function CreateNewListBoxInsideNewPageTab() As ListBox
        Dim newTab As New TabPage()
        newTab.Text = "Tab " & TabControl1.TabPages.Count + 1

        Dim newLst As New ListBox
        newLst.Dock = DockStyle.Fill

        newTab.Controls.Add(newLst)
        TabControl1.TabPages.Add(newTab)
        TabControl1.SelectedTab = newTab
        Return newLst
    End Function

Теперь, когда я вызову эту функцию, у меня будет новый список в виде объекта:

Dim newListBox as ListBox = CreateNewListBoxInsideNewPageTab()
newListBox.Items.Add("This is a new listbox item!")
1 голос
/ 12 августа 2011

Хорошо, я попробую, но я действительно ржавый с WinForms, чуть менее ржавый с VB.NET. Вам нужно найти элемент управления, который вы хотите обновить, и вы сможете сделать это с помощью коллекции Controls соответствующего контейнера - в этом случае, скорее всего, TabPage:

TextBox tb1 = CType(tabpage.Controls.Find("textBox1", false), TextBox)
tb1.Text = "I set the text!"

Синтаксис может быть немного отключен, но, надеюсь, это, по крайней мере, укажет вам правильное направление.

См. Control.ControlCollection.Find Method

ОБНОВЛЕНО

Ханс Пассант предположил, что это не работает, потому что вы не установили свойство Name (я предполагаю, что он имеет в виду имя элементов управления, а не вкладку). Я немного больше прочитал о методе ControlsCollection.Find, и MSDN говорит: «Поиск элементов управления по их свойству Name и создание массива всех соответствующих элементов управления». Вы (и я) пытались найти элемент управления по имени экземпляра (textbox1, textbox2) - это были имена instance для двух элементов управления, а не names .

Так что попробуйте это вместо:

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

    Dim tabpage As New TabPage
    tabpage.Text = "(empty)"

    Dim textbox1 As New TextBox
    Dim textbox2 As New TextBox

    textbox1.Parent = tabpage
    textbox2.Parent = tabpage

    textbox1.Location = New Point(10, 10)
    textbox2.Location = New Point(10, 30)

    textbox1.Name = "textbox1"
    textbox2.Name = "textbox2"

    TabControl1.TabPages.Add(tabpage)

End Sub

Тогда вы можете найти элемент управления, используя:

TextBox tb1 = CType(TabControl1.TabPages.Item(TabControl1.TabPages.Count - 1).Controls.Find("textbox1", True)(0), TextBox) 
tb1.text = "Test"

Попробуйте и посмотрите, работает ли он для вас. Ключ (и то, что я упустил, глядя на твой код прошлой ночью, так как он был для меня после сна), теперь был способ идентифицировать элемент управления в методе Find.

...