2017-10-09 5 views
0

J'essaie d'ajouter dynamiquement certaines commandes (actuellement zones de texte et étiquettes) à un formulaire. Il n'y a pas un nombre déterminé de paires à dessiner ».Comment ajouter dynamiquement des paires de contrôles

Exemple de ce que j'essaie d'atteindre. Comme vous pouvez le voir, la table manque d'espace, elle se déplace donc vers la droite. Actuellement, j'utilise un TableLayoutPanel dans un FlowLayoutPanel.
Column 0 contient le label et column 1 contient le textbox.

Comment puis-je obtenir le FlowLayoutPanel pour diviser le tableau?

private void Form1_Load(object sender, EventArgs e) 
{ 
    FlowLayoutPanel flp = new FlowLayoutPanel() 
    { 
     Location = new Point(0, 0), 
     Dock = DockStyle.Fill, 
     AutoSize = false, 
     FlowDirection = FlowDirection.TopDown, 
     AutoScroll = true, 
     BorderStyle = BorderStyle.Fixed3D, 
     WrapContents = true 
    }; 

    Controls.Add(flp); 

    TableLayoutPanel tlp = new TableLayoutPanel() 
    { 
     ColumnCount = 2, 
     Height = ClientSize.Height, 
     BackColor=Color.AliceBlue 
    }; 

    flp.Controls.Add(tlp); 

    for (int i = 0; i < 50; i++) 
    { 
     Label _label = new Label() 
     { 
      Text = i.ToString("00"), 
      AutoSize = true 
     }; 

     tlp.Controls.Add(_label, 0, i); 

     TextBox _textbox = new TextBox(); 
     tlp.Controls.Add(_textbox, 1, i); 
    } 
+0

Utilisez un contrôle conçu pour les champs dynamiquement en ajoutant, comme [ 'DataGridView'] (https://msdn.microsoft.com/en -us/library/system.windows.forms.datagridview (v = vs.110) .aspx), pas un 'TableLayoutPanel'. –

Répondre

1

Vous pouvez utiliser TableLayoutPanel ayant 4 colonnes, et ensemble approprié ColumnStyles pour le contrôle.

Exemple

Mettez un bouton et un panneau sur le formulaire et définissez les ancrages de panneau sur tous les bords. Ensuite poignée cliquez cas de bouton et utiliser ce code:

private void button1_Click(object sender, EventArgs e) 
{ 
    var fields = new string[] { "A Field", "Some Field", "Another Field", 
     "A Long Field Name", "A Long Long Field Name" }; 
    var tlp = new TableLayoutPanel() { Dock = DockStyle.Fill, ColumnCount = 4 }; 
    tlp.ColumnStyles.Add(new ColumnStyle(SizeType.AutoSize)); 
    tlp.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50)); 
    tlp.ColumnStyles.Add(new ColumnStyle(SizeType.AutoSize)); 
    tlp.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50)); 
    panel1.Controls.Add(tlp); 
    foreach (var item in fields) 
    { 
     tlp.Controls.Add(new Label() { Text = item, AutoSize = true }); 
     tlp.Controls.Add(new TextBox() { Dock = DockStyle.Fill }); 
    } 
} 

enter image description here