在 vb.net 中动态地向组框添加标签和其他控件不起作用?
Adding labels and other controls to a groupbox dynamically in vb.net not working?
所以我在将记录结构中的标签添加到垂直堆叠在彼此下方的组框中时遇到了问题。我可以使用 Flow Layout Panel,但我有多个标签需要从记录结构中的数据添加,我希望以后能够使用垂直滚动条滚动,因为自动滚动仅适用于一个面板,而不是所有面板他们。
出于某种原因,程序只放入了一个标签,而其他标签即使已创建也似乎不可见(我使用消息框进行检查)。有人可以帮我把它们放进去吗,因为我对编程还很陌生,需要帮助。
对于上下文,程序从 xml 文件加载 'materials' 并将其存储在记录结构中,然后程序的这一点动态创建标签和单选按钮并将其放入组框中,这样它就可以手动排列在一个漂亮的网格上,稍后可以通过使用滚动条来滚动。因为我正在处理的数据都是相关的,并且可以有多种大小的字符串(例如名称和材料供应商) 我不想尝试添加空格来使网格工作,但只有一个标签(不是因为某些原因其他标签会显示在第一个标签下方)
代码:
'sets up Labels for editing materials
prgFunctions.loadMat()
Dim counter As Integer
Dim newMatIDLabel(numMatFile) As Label
Dim newMatRdb(numMatFile) As RadioButton
Dim lastPos As Integer
'testing to see if materials load GET RID OF LATER
' For counter = 1 To numMatFile
'ListBox1.Items.Add(materials(counter).matName)
' Next
'create the labels with information
For counter = 1 To numMatFile
'ID
newMatIDLabel(counter) = New Label
newMatIDLabel(counter).Name = "lblMatIDNum" & counter
newMatIDLabel(counter).Text = materials(counter).matID
newMatIDLabel(counter).Parent = gbxMaterials
' MsgBox(newMatIDLabel(counter).Name & " " & newMatIDLabel(counter).Text)
Next
'create the checkboxes NOW RADIO BUTTONS
For counter = 1 To numMatFile
newMatRdb(counter) = New RadioButton
newMatRdb(counter).Name = "chkMatSelectNum" & counter
newMatRdb(counter).Text = ""
newMatRdb(counter).Parent = gbxMaterials
Next
'matID locations
lastPos = 10
For counter = 1 To numMatFile
'SOMEHOW MOVE IT INTO THE GROUPBOX INSTEAD, as issues arise everywhere
newMatIDLabel(counter).Location = New Point(7, lastPos + 10)
lastPos = lastPos + 10
Next
为什么不只是:
lastPos = 10
For counter = 1 To numMatFile
Dim label As New Label
label.Name = "chkMatSelectNum" & counter
label.Text = materials(counter).matID
label.Location = New Point(7, lastPos)
label.Visible = True
gbxMaterials.Controls.Add(label)
lastPos += label.Height
Next
基于 F0r3v3r-A-N00b 的回答:
标签的高度为 23,所以它似乎隐藏了其他标签。
这对我有用:
Dim lastPos As Integer = 20
For counter As Integer = 1 To numMatFile
Dim label As New Label
label.Name = "chkMatSelectNum" & counter
label.Text = materials(counter).matId
label.AutoSize = True
label.Visible = True
label.Location = New Point(7, lastPos)
gbxMaterials.Controls.Add(label)
lastPos += 17
Next
所以我在将记录结构中的标签添加到垂直堆叠在彼此下方的组框中时遇到了问题。我可以使用 Flow Layout Panel,但我有多个标签需要从记录结构中的数据添加,我希望以后能够使用垂直滚动条滚动,因为自动滚动仅适用于一个面板,而不是所有面板他们。
出于某种原因,程序只放入了一个标签,而其他标签即使已创建也似乎不可见(我使用消息框进行检查)。有人可以帮我把它们放进去吗,因为我对编程还很陌生,需要帮助。
对于上下文,程序从 xml 文件加载 'materials' 并将其存储在记录结构中,然后程序的这一点动态创建标签和单选按钮并将其放入组框中,这样它就可以手动排列在一个漂亮的网格上,稍后可以通过使用滚动条来滚动。因为我正在处理的数据都是相关的,并且可以有多种大小的字符串(例如名称和材料供应商) 我不想尝试添加空格来使网格工作,但只有一个标签(不是因为某些原因其他标签会显示在第一个标签下方)
代码:
'sets up Labels for editing materials
prgFunctions.loadMat()
Dim counter As Integer
Dim newMatIDLabel(numMatFile) As Label
Dim newMatRdb(numMatFile) As RadioButton
Dim lastPos As Integer
'testing to see if materials load GET RID OF LATER
' For counter = 1 To numMatFile
'ListBox1.Items.Add(materials(counter).matName)
' Next
'create the labels with information
For counter = 1 To numMatFile
'ID
newMatIDLabel(counter) = New Label
newMatIDLabel(counter).Name = "lblMatIDNum" & counter
newMatIDLabel(counter).Text = materials(counter).matID
newMatIDLabel(counter).Parent = gbxMaterials
' MsgBox(newMatIDLabel(counter).Name & " " & newMatIDLabel(counter).Text)
Next
'create the checkboxes NOW RADIO BUTTONS
For counter = 1 To numMatFile
newMatRdb(counter) = New RadioButton
newMatRdb(counter).Name = "chkMatSelectNum" & counter
newMatRdb(counter).Text = ""
newMatRdb(counter).Parent = gbxMaterials
Next
'matID locations
lastPos = 10
For counter = 1 To numMatFile
'SOMEHOW MOVE IT INTO THE GROUPBOX INSTEAD, as issues arise everywhere
newMatIDLabel(counter).Location = New Point(7, lastPos + 10)
lastPos = lastPos + 10
Next
为什么不只是:
lastPos = 10
For counter = 1 To numMatFile
Dim label As New Label
label.Name = "chkMatSelectNum" & counter
label.Text = materials(counter).matID
label.Location = New Point(7, lastPos)
label.Visible = True
gbxMaterials.Controls.Add(label)
lastPos += label.Height
Next
基于 F0r3v3r-A-N00b 的回答:
标签的高度为 23,所以它似乎隐藏了其他标签。
这对我有用:
Dim lastPos As Integer = 20
For counter As Integer = 1 To numMatFile
Dim label As New Label
label.Name = "chkMatSelectNum" & counter
label.Text = materials(counter).matId
label.AutoSize = True
label.Visible = True
label.Location = New Point(7, lastPos)
gbxMaterials.Controls.Add(label)
lastPos += 17
Next