在 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