如何向TabControl添加新选项卡并能够更新其中的控件?

时间:2011-08-12 05:15:26

标签: vb.net winforms tabs tabcontrol

我需要能够以编程方式在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

Urgh。我似乎无法回到我用来发布这个问题的帐户,因此我必须在对前一个答案的评论中将Tim的问题作为新答案发布。 Debug.WriteLine(TabControl1.TabPages.Item(2).Controls.Find("textbox1", True).Count)返回0.之前已创建选项卡和控件。

3 个答案:

答案 0 :(得分:1)

好的 - 我会给它一个机会,但我真的生锈了WinForms,稍微不那么生锈的VB.NET。您需要找到要更新的控件,并且应该能够通过相应容器的Controls集合执行此操作 - 在这种情况下,很可能是TabPage

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

语法可能略有偏差,但希望这至少会指向正确的方向。

请参阅Control.ControlCollection.Find Method

<强>已更新

Hans Passant建议这不起作用,因为你没有设置Name属性(我假设他的意思是控件的名称,而不是标签页)。我对ControlsCollection.Find方法做了一些阅读,MSDN说“通过Name属性搜索控件,并构建一个匹配的所有控件的数组。”您(和我)试图通过实例名称(textbox1,textbox2)找到控件 - 这两个控件的实例名称,而不是控件名称

所以试试这个:

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方法识别控件的方法。

答案 1 :(得分:1)

我知道这是旧的,但只是一个意见,写一个创建AND的函数返回你想要添加到tabpage的控件。在这种情况下,您将获得随时可用的控件的参考。 例如:

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!")

答案 2 :(得分:0)

程序启动后是否可以添加tabcontroll元素?

  For i = 0 To frmMain.cmbZielSpache.Items.Count - 1

        Dim cBox = New CheckBox()
        cBox.Name = "GEN_" & i
        cBox.Location = New Point(offsetX, offsetY)
        cBox.Text = frmMain.cmbZielSpache.Items(i)

        If frmMain.cmbZielSpache.Items(i) = frmMain.cmbZielSpache.Text Or My.Settings.chkTranslate_normal_alleSprachen = True Then
            cBox.Checked = True
        End If

        offsetX = offsetX + 120

        Me.Controls.Add(cBox)
        AddHandler cBox.CheckedChanged, AddressOf checkChangedHandler

    Next i

我不想使用Me.Control,而是想在程序动态启动后添加复选框。