Question

Comment changer la propriété d'un contrôle dans un FlowLayoutPanel en supposant que vous ajoutez les contrôles et en supposant que programatically le nom de chaque contrôle sont les mêmes?

Par exemple cette image vous montre qu'il ya 2 zones de texte et deux boutons, comment pourrais-je changer la couleur arrière du bouton 2? En supposant que les commandes ont été ajoutées lors de l'exécution.

text alt

foreach(Controls ctrl in flowlayoutpanel1.Controls)
{
//What should I put here?
}
Était-ce utile?

La solution

Eh bien, la meilleure façon serait de conserver une référence explicite aux boutons que vous ajoutez. Sinon, vous pouvez ajouter une balise pour les distinguer (pour être robuste contre les problèmes de i18n). Par exemple. vous pouvez définir l'étiquette de « button2 » à « button2 » et vous pouvez utiliser:

foreach (Control ctl in flp.Controls) {
    if ("button2".Equals(ctl.Tag)) {
        ctl.BackColor = Color.Red;
    }

}

Je suppose que votre problème est de trouver le bouton réel réglage à nouveau et non la couleur de fond. Vous pouvez également vérifier la commande étant un bouton et son texte étant « button2 » mais si le texte peut changer en fonction de la langue de l'interface utilisateur qui est sans doute pas une bonne idée.

ETA:. totalement oublié que vous pouvez utiliser la propriété Name du contrôle pour cela aussi

Si vous voulez juste changer la couleur de fond du bouton dans une réponse à une événement à partir du bouton, vous pouvez simplement utiliser l'argument sender du gestionnaire d'événements, cependant.

Autres conseils

Vous pouvez essayer Control.ControlCollection.Find .

flowLayoutPanel1.Controls.Add(new Button() { Text = "button 1", Name = "btn1" });
Button btn1 = flowLayoutPanel1.Controls.Find("btn1", true).FirstOrDefault() as Button;
btn1.Text = "found!";
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top