我正在尝试将一些制表符添加到名为“ EMER_AUTO_TabContorl”并由emer_num_textbox控制的现有TabControl中。
如下图所示,我应该是“ A组” /“ B组” /“ C组”,但应该是“ C组” /“ B组” /“ C组”。
这是我的代码。
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”。
答案 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