2016-03-06 2 views
0

J'essaye d'organiser par programme de haut en bas une paire de label-textbox en utilisant un flowlayoutpanel. Ce que je suis en train de faire est similaire à l'image suivante:Organiser une paire de label-textbox dans un FlowLayoutPanel

modscan example

donc je l'ai mis en œuvre sous le code (je dois créer 254 paires label textbox):

Dim lbl As Label 
Dim txt As TextBox 
Dim flowLayout As FlowLayoutPanel 

For i As Integer = 0 To 253 
    lbl = New Label 
    lbl.Text = i.ToString("000") + ":" 
    lbl.Padding = New Padding(0) 
    lbl.Margin = New Padding(0) 

    txt = New TextBox 
    txt.Text = "<" + i.ToString.PadLeft(3, " ") + ">" 
    txt.MaxLength = 5 
    txt.Margin = New Padding(0) 
    txt.Size = New Size(39, 20) 

    flowLayout = New FlowLayoutPanel 
    flowLayout.FlowDirection = FlowDirection.LeftToRight 
    flowLayout.Controls.Add(lbl) 
    flowLayout.Controls.Add(txt) 
    flowLayout.Padding = New Padding(0) 
    flowLayout.Margin = New Padding(0) 

    Me.FlowLayoutPnl.Controls.Add(flowLayout) 
Next 

mais en utilisant au-dessus Je reçois le code ci-dessous:

my flowlayoutpanel

Toutes les idées?

+0

Régler la hauteur du FLP vous créez à 24 ou plus. Vous avez probablement besoin d'activer AutoScroll sur un panneau ou peut-être le formulaire parce que 254 prend beaucoup de place. Vous pouvez également essayer un TableLayoutPanel à la place du FLP créé dans le code et définir des tailles et des alignements – Plutonix

Répondre

0

Si je comprends ce que vous cherchez, ce code devrait vous donner le résultat escompté.

Dim flowLayout As New FlowLayoutPanel 
    flowLayout.AutoScroll = True 

    For i = 0 To 253 
     Dim label As New Label 
     label.AutoSize = True 
     label.Padding = New Padding(10, 5, 5, 10) 
     label.Text = i.ToString("000 ") + ":" 

     Dim txt As New TextBox 
     txt.Text = "Input " + i.ToString 
     txt.MaxLength = 5 

     flowLayout.Controls.Add(label) 
     flowLayout.Controls.Add(txt) 
    Next 

    Controls.Add(flowLayout) 
    flowLayout.Dock= DockStyle.Fill 

C'est ce que je reçois quand je lance ce code: Code output

Par ailleurs, l'image de votre choix que vous avez affichée montre une paire d'étiquettes, pas l'étiquette/TextBox. A propos du code, vous devez d'abord créer le conteneur principal (FlowLayoutPanel), puis pendant que vous faites l'itération, vous devez ajouter chaque élément à votre conteneur. Enfin, vous devez ajouter le FlowLayoutPanel à vos contrôles de formulaire pour être affiché sur le formulaire.

+0

Votre code met txt sous l'étiquette. Je veux txt à côté de l'étiquette. – user1624552

+0

Je viens de télécharger une capture d'écran. Je pense que cela montre ce que vous avez expliqué exactement. – Saeid

+0

C'est bizarre, j'ai copié exactement votre code et je n'obtiens pas ce résultat. Dans mon cas, flowlayoutpanel (dans votre code, flowlayout) est créé au moment du design, pas en cours d'exécution, peut-être que cela affecte ... Je sais quel est le problème, vous organisez de gauche à droite, et j'organise de haut en bas bas, donc votre code en cas de haut en bas ne fonctionne pas, seulement de gauche à droite. – user1624552

0

Je l'ai résolu en utilisant ci-dessous le code:

Private Sub PopupForm_Load(ByVal sender As Object, ByVal e As System.EventArgs) _ 
Handles Me.Load 
    Dim lbl As Label 
    Dim txt As TextBox 
    Dim flowLayout As FlowLayoutPanel 
    Dim g As Graphics 


    For i As Integer = 0 To 253 
     lbl = New Label 
     lbl.Text = i.ToString("000") + ":" 
     lbl.Anchor = AnchorStyles.None 
     lbl.AutoSize = True 


     txt = New TextBox 
     txt.Text = "<" + i.ToString.PadLeft(3, " ") + ">" 
     txt.MaxLength = 5 
     txt.Anchor = AnchorStyles.None 
     txt.ReadOnly = True 
     g = txt.CreateGraphics 
     txt.Width = g.MeasureString(txt.Text, txt.Font).Width + 5 
     g.Dispose() 

     flowLayout = New FlowLayoutPanel 
     flowLayout.FlowDirection = FlowDirection.LeftToRight 
     flowLayout.AutoSize = True 
     flowLayout.Anchor = AnchorStyles.None 
     flowLayout.Margin = New Padding(0) 
     flowLayout.Padding = New Padding(0) 

     flowLayout.Controls.Add(lbl) 
     flowLayout.Controls.Add(txt) 

     Me.FlowLayoutPnl.Controls.Add(flowLayout) 
    Next 
End Sub 

et le résultat est this

Notes:

Mon FlowLayoutPnl est créé dans le temps de conception avec des propriétés ci-dessous (les autres à défaut) :

  • AutoSize à true
  • AutoScroll true
  • Dock pour remplir
  • FlowDirection à TopDown