Je travaille sur une application de bureau qui inclut un schéma graphique et ce schéma comporte 50 boutons de glisser-déposer (ils ne sont pas alloués de manière dynamique), ils sont tous nommés similaires (par exemple, le bouton 1 est BTNP1, le bouton 2 est BTNP2, etc. ...). J'aimerais accéder à ces boutons avec une boucle pour une boucle à l'aide de la chaîne, j'ai vérifié quelques postes précédents sur ce site, mais aucune de ces réponses n'a aidé mon problème.
J'ai écrit 50 lignes de codes pour ajouter ces boutons à des contrôles et les mêmes moment où je les ajoute aux contrôles qu'ils disparaissent du schéma graphique. Plus tard j'ai essayé d'y accéder à travers la boucle, mais rien ne s'est passé, car ils disparaissent une fois que je les ajoutes aux commandes. P>
this.Controls.Add(btnP1);
this.Controls.Add(btnP2);
this.Controls.Add(btnP3);
this.Controls.Add(btnP4);
... and so on
this.Controls.Add(btnP47);
this.Controls.Add(btnP48);
this.Controls.Add(btnP49);
this.Controls.Add(btnP50);
for(int i = 1; i <= 50; i++)
{
this.Controls["btnP"+ i.ToString()].Visible= False;
}
3 Réponses :
Pour boucler sur tous les boutons dans une commande Vous pouvez utiliser un foreach code> LOOP foreach(Button btn in this.Controls.OfType<Button>())
{
btn.Visible = false; //every button in you Control
}
@ Ahmeshalilović Si cela fonctionnait, veuillez optimiser la réponse et l'accepter.
Semblable à la réponse de Mario, mais j'élarposera probablement les sélecteurs si leur nommage est cohérent et filtrerait ceux qui ne peuvent pas être supprimés:
foreach (Button btn in this.Controls.OfType<Button>().Where(x => x.Name.StartsWith("btnP") && x.AllowDrop))
{
btn.Visible = false;
}
Version LINQ:
this.Controls
.OfType<Button>()
.Where(b => b.Name.StartsWith("btnP") && b.AllowDrop)
.ToList()
.ForEach(b => b.Visible = false);
Essayez d'y accéder avec un simple
foreach () code> boucle