none
Create variable dynamically c# Windows form RRS feed

  • Question

  • I want to create variables dynamically in order to create labels text boxes depending on the numbers of records I have.
    to create such a label I'm doing this:
      Product label = new Label ();
      produit.Name = "Label" + i.ToString ();
      produit.Text = "hello";
      produit.Visible = true;
      produit.Location = new System.Drawing.Point (10, 25);
    produit.Size = new System.Drawing.Size (70, 20);
    this.Controls.Add (product);
    if I want to loop for several labels, I must have, for example in addition to the variable product, Product1, product2 ... according to the number of product I have so that I can assign values of their their parameters and i do not know how can i do this
    please help
    jeudi 6 octobre 2016 23:16

Réponses

  • Bonjour,

    Voici comment créer des contrôles dynamiquement (dans cet exemple des labels) :

    public partial class Form1 : Form
        {
            private int cLeft = 1;
            private int _index = 0;
    
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                addControls();
            }
    
            private void addControls()
            {
                Label lbl = new Label();
                lbl.Name = "Label" + _index;
                this.Controls.Add(lbl);
                lbl.Top = cLeft * 25;
                lbl.Left = 100;
                lbl.Text = "Label " + lbl.Name;
                cLeft = cLeft + 1;
                _index = _index + 1;
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                Label c = this.Controls["Label0"] as Label;
                c.Text = "New Text for Label 0";
            }
        }

    Je nomme mes nouveaux contrôles à l'aide d'un index (propriété Name). Dans le clic du Bouton 1, je rajoute un contrôle Label à l'arborescence des contrôles.

    Dans le clic du bouton 2, je cherche le Label0 pour accéder à sa propriété Text.

    Cordialement,

    • Marqué comme réponse nadita007 vendredi 7 octobre 2016 10:06
    vendredi 7 octobre 2016 08:37

Toutes les réponses

  • Bonjour,

    Voici comment créer des contrôles dynamiquement (dans cet exemple des labels) :

    public partial class Form1 : Form
        {
            private int cLeft = 1;
            private int _index = 0;
    
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                addControls();
            }
    
            private void addControls()
            {
                Label lbl = new Label();
                lbl.Name = "Label" + _index;
                this.Controls.Add(lbl);
                lbl.Top = cLeft * 25;
                lbl.Left = 100;
                lbl.Text = "Label " + lbl.Name;
                cLeft = cLeft + 1;
                _index = _index + 1;
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                Label c = this.Controls["Label0"] as Label;
                c.Text = "New Text for Label 0";
            }
        }

    Je nomme mes nouveaux contrôles à l'aide d'un index (propriété Name). Dans le clic du Bouton 1, je rajoute un contrôle Label à l'arborescence des contrôles.

    Dans le clic du bouton 2, je cherche le Label0 pour accéder à sa propriété Text.

    Cordialement,

    • Marqué comme réponse nadita007 vendredi 7 octobre 2016 10:06
    vendredi 7 octobre 2016 08:37
  • Bonjour ,

    je vous remercie déjà pour votre réponse,mais j'ai une autre question si vous pouvez m'aider.

    pour la partie :

     Label c = this.Controls["Label0"] as Label;
                c.Text = "New Text for Label 0";

    ce que je voudrais c'est faire les choses comme ça :

    label c =this.control["label"+_index] as label

    c.text="something";

    ça ne marche pas comme ça ,est ce que vous pouvez me proposer une solution pour gérer dynamiquement les input créés 

    vendredi 7 octobre 2016 10:06
  • Dans votre cas, il faudrait mieux faire :

    Label c = this.Controls["Label" + (_index - 1)] as Label;

    en effet, dans ma méthode addControls, j'incrémente toujours l'_index de 1 ou cas ou la prochaine fois vous créez un nouveau contrôle. Pour aller chercher l'index du dernier contrôle en date, il faut faire _index - 1. Sinon pour éviter cela, mettez la ligne

    _index = _index + 1;

    au début.

    private void addControls()
            {
                _index = _index + 1;
                Label lbl = new Label();
                lbl.Name = "Label" + _index;
                this.Controls.Add(lbl);
                lbl.Top = cLeft * 25;
                lbl.Left = 100;
                lbl.Text = "Label " + lbl.Name;
                cLeft = cLeft + 1;
               
            }

    Cordialement,

    vendredi 7 octobre 2016 10:19