我如何动态地将标签页添加到标签控件并添加标签到标签页

时间:2020-07-15 10:50:02

标签: vb.net tabcontrol tabpage

我正在尝试将一些制表符添加到名为“ EMER_AUTO_TabContorl”并由emer_num_textbox控制的现有TabControl中。

如下图所示,我应该是“ A组” /“ B组” /“ C组”,但应该是“ C组” /“ B组” /“ C组”。

enter image description here

这是我的代码。

Dim group_name As String() = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J"} 'my group name
Dim mytabPage As TabPage = New TabPage 
Dim myLabel As Label = New Label
Dim emer_groupNum As Integer 'my input number
Try
        emer_groupNum = Emer_Num_TextBox.Text 
        EMER_AUTO_TabControl.TabPages.Clear() 'Clear my tabControl
Catch           
End Try

For i = 1 To emer_groupNum

   With myLabel
       .Text = "123"
       .Location = New Point(6, pos1_Y)
   End With

   With mytabPage
      .Text = group_name(i - 1) & " Group"         
      .Controls.Add(myLabel)
   End With

   EMER_AUTO_TabControl.TabPages.Add(mytabPage)               
Next

在TabPages上不显示标签文本“ 123”。

3 个答案:

答案 0 :(得分:0)

您每次都在重复使用相同的标签页和标签。如下所示,在for循环内移动“ New”:

Dim group_name As String() = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J"} 'my group name
Dim mytabPage As TabPage 
Dim myLabel As Label 
Dim emer_groupNum As Integer 'my input number
Try
        emer_groupNum = Emer_Num_TextBox.Text 
        EMER_AUTO_TabControl.TabPages.Clear() 'Clear my tabControl
Catch           
End Try

For i = 1 To emer_groupNum
   myLabel = New Label
   With myLabel
       .Text = "123"
       .Location = New Point(6, pos1_Y)
   End With

   mytabPage = New TabPage
   With mytabPage
      .Text = group_name(i - 1) & " Group"         
      .Controls.Add(myLabel)
   End With

   EMER_AUTO_TabControl.TabPages.Add(mytabPage)               
Next

编辑

您可能还想更改测试正确整数输入的方式,就像使用Try / Catch当前一样,无论是否运行For循环。也许尝试这样的事情:

   If Integer.TryParse(Emer_Num_TextBox.Text, emer_groupNum) Then
        For i = 1 To emer_groupNum
            ' Loop code here
        Next
    Else
        ' Handle incorrect input
    End If

答案 1 :(得分:0)

启用严格选项。

如果文本框包含可转换为整数的字符串,则应使用.TryParse进行测试。

切勿写空的Catch。您的代码只会吞下错误,而您不会知道出了什么问题。在这段代码中,正确检查用户输入应该不会出错。

我认为您的问题是在循环之外声明标签和标签页。这只会创建一个标签和标签页。在循环的每次迭代中,您都可以更改单个控件的属性,并将其读取到集合中。在循环中声明控件,您将获得控件的新实例。

Private Sub OPCode()
    Dim group_name As String() = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J"} 'my group name
    Dim emer_groupNum As Integer  'my input number
    If Not Integer.TryParse(TextBox1.Text, emer_groupNum) Then
        MessageBox.Show("Please enter a valid number in the box.")
        Exit Sub
    End If
    Dim pos1_Y As Integer = 3
    TabControl1.TabPages.Clear() 'Clear my tabControl
    For i = 1 To emer_groupNum
        Dim mytabPage As TabPage = New TabPage
        Dim myLabel As Label = New Label
        With myLabel
            .Text = "123"
            .Location = New Point(6, pos1_Y)
        End With
        With mytabPage
            .Text = group_name(i - 1) & " Group"
            .Controls.Add(myLabel)
        End With
        TabControl1.TabPages.Add(mytabPage)
    Next
End Sub

答案 2 :(得分:0)

您可以在窗体加载时构建所有TabPage,并将它们存储在列表中,然后只需从该列表中重新填充TabControl:

Private Groups As New List(Of TabPage)

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim group_names As String = "ABCDEFGHIJ"
    For i As Integer = 1 To group_names.Length
        Dim mytabPage As New TabPage
        mytabPage.Text = group_names(i - 1) & " Group"
        Groups.Add(mytabPage)

        Dim myLabel As New Label
        With myLabel
            .Text = "123"
            .Location = New Point(6, pos1_Y) ' <-- Not sure if "pos1_Y" changes?
        End With
        mytabPage.Controls.Add(myLabel)
    Next
End Sub

Private Sub Emer_Num_TextBox_TextChanged(sender As Object, e As EventArgs) Handles Emer_Num_TextBox.TextChanged
    Dim i As Integer
    If Integer.TryParse(Emer_Num_TextBox.Text, i) Then
        If i >= 0 AndAlso i <= Groups.Count Then
            EMER_AUTO_TabControl.TabPages.Clear()
            For Each tab As TabPage In Groups.Take(i)
                EMER_AUTO_TabControl.TabPages.Add(tab)
            Next
        End If
    End If
End Sub
相关问题