2017-08-01 8 views
1

J'ai donc eu des problèmes pour ajouter des étiquettes d'une structure d'enregistrement dans une boîte de groupe qui s'empilent verticalement les unes par rapport aux autres. Je pourrais utiliser un panneau de disposition de flux mais j'ai plusieurs étiquettes que je dois ajouter des données dans une structure d'enregistrement que je veux pouvoir défiler plus tard avec une barre de défilement verticale car le défilement automatique fonctionnera seulement avec un panneau, et pas tous leur.L'ajout dynamique d'étiquettes et d'autres contrôles à une zone de groupe dans vb.net ne fonctionne pas?

Pour une raison quelconque, le programme ne place qu'une seule étiquette, et les autres ne semblent pas être visibles même si elles ont été créées (j'ai utilisé un messagebox pour vérifier). Quelqu'un pourrait-il m'aider s'il vous plaît à les mettre dedans, comme je suis assez nouveau à la programmation et ai besoin de l'aide. Pour le contexte, le programme charge 'materials' à partir d'un fichier xml et le stocke dans une structure d'enregistrement, puis ce bit du programme crée des étiquettes et des boutons radio dynamiquement et le place dans une zone de groupe, de sorte qu'il peut être organisé manuellement sur une jolie grille qui deviendra tout défilement en utilisant une barre de défilement plus tard .. Parce que les données que je travaille sont toutes liées, et peuvent avoir des chaînes de tailles multiples (noms et fournisseurs de matériaux par exemple) je ne voulais pas tentent d'ajouter des espaces pour rendre le travail de la grille, mais avec une seule étiquette (pas que les autres montreraient sous la première pour une raison quelconque)

CODE:

'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 

Répondre

0

Sur la base de la réponse de F0r3v3r-A-N00b:

L'étiquette a une hauteur de 23, il semble donc qu'il se cache les autres.

Cela fonctionne pour moi:

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 
+0

merci, cela a fonctionné! Je pensais que j'avais déjà essayé quelque chose de similaire avant, mais évidemment je ne l'ai pas fait: / –

1

Pourquoi ne pas simplement:

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 
+0

qui ne Nope rien, seul le premier semble et non pas les autres qui sont censés être en dessous –

+0

Voir mes mises à jour –

+0

réponse merci, mais il serait un peu déroutant si toutes les étiquettes montaient d'une hauteur de l'étiquette (pas que ça fasse une grosse différence mais ça aurait l'air bizarre), la réponse de Patrick a fonctionné, ses chiffres juste utilisés –