[英]How can I add tabpage to tabcontrol dynamically and add label to tabpage
我正在嘗試將一些 Tabages 添加到名為“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
除了 Label 文本“123”不會顯示在 TabPages 上。
您每次都在重復使用相同的標簽頁和 label。 在 for 循環中移動“新建”,如下所示:
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
編輯
您可能還想更改測試正確的 integer 輸入的方式,就像當前運行 For 循環的 Try/Catch 一樣。 也許嘗試這樣的事情:
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
打開選項嚴格。
如果文本框有一個可以轉換為 Integer 的字符串,您應該使用.TryParse 進行測試。
永遠不要寫一個空的 Catch。 你的代碼只會吞下錯誤,你不會知道出了什么問題。 在這段代碼中,go 在正確檢查用戶輸入方面沒有任何問題。
我認為您的問題是在循環之外聲明您的 label 和標簽頁。 這只會創建一個 label 和標簽頁。 在循環的每次迭代中,您更改單個控件的屬性並將相同的 this 讀取到集合中。 在循環中聲明您的控件,您將獲得控件的新實例。
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
您可以在表單加載時構建所有 TabPages 並將它們存儲在一個列表中,然后只需從該列表中重新填充 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.