Comment renommer plusieurs boutons dans une boucle en C #

J’ai un programme de type cuirassé où il y a une grid de boutons de 10 x 10. Au début du programme, je voudrais que le texte de tous les boutons soit remplacé par “—“, ce qui indique que personne n’a tiré sur cette coordonnée. Je n’arrive pas à trouver un moyen de renommer tous les boutons en une boucle. Les boutons portent tous les noms b00, b01, b02 … qui indiquent leurs coordonnées. le premier numéro est la rangée et le second nombre est la colonne. (ie, b69 représente la ligne 7, colonne 10).

J’espère que vous pourrez aider!

Merci d’avance!

Luke

Vous pouvez également utiliser la méthode d’extension OfType () pour filtrer en fonction du type spécifié. Voir l’exemple suivant

foreach (Button btn in this.Controls.OfType 

comme vous pouvez le voir en utilisant la méthode d’extension OfType, vous n’avez pas besoin de transtyper le contrôle en Type de bouton

J’espère que cette aide.

Cordialement

Que dis-tu de ça:

  foreach (Control c in this.Controls) { if (c is Button) { ((Button)c).Text = "---"; } } 

Cet extrait parcourt tous les contrôles du formulaire ( this ), vérifie si chacun d’eux est un bouton et si vous définissez sa propriété Text sur “—“. Sinon, si vos boutons se trouvaient sur un autre conteneur, tel qu’un panneau, vous devriez remplacer this.Controls par yourPanel.Controls .

Vous pouvez obtenir la liste des contrôles à partir du conteneur parent et les parcourir en boucle.

Quelque chose comme ça:

 foreach (Control c in myForm.Controls) { if (c is Button) { ((Button)c).Text = "---"; } } 

Pensez à append chacun des boutons à une liste:

 // instantiate a list (at the form class level) List 

Ensuite, vous pouvez définir un bouton donné comme ceci:

 buttonList(0).Text = "---" // sets b00 

Ou tout le bouton ainsi:

 foreach (Button b in buttonList) { b.Text = "---"; } 

Les autres possibilités abondent:

  • Placer les boutons dans un tableau 2D pour permettre l’adressage par ligne et par colonne. Vous pouvez toujours faire un foreach sur le tableau pour tout définir en même temps.

  • Création des boutons (et définition de la taille et de la position) par programme pour éviter de créer tous les boutons dans le concepteur. Cela vous permettrait également de définir la taille de la grid au moment de l’exécution.

Ce que je fais dans des situations comme celle-ci consiste à stocker les contrôles que je souhaite manipuler fréquemment dans une List ou de préférence une collection IEnumerable<> , que j’initialise normalement à la construction ou dans le gestionnaire d’événements Load du contrôle contenant (par exemple, ces contrôles sont contenus dans un Form ou sont inclus dans un GroupBox ). En faisant cela, j’espère réduire le risque de devoir trouver ces contrôles chaque fois que j’ai besoin de cette collection. Si vous n’avez besoin que de faire cela une fois, je n’aurais pas pris la peine d’append la collection de buttons .

Donc, quelque chose comme ça:

 // the collection of objects that I need to operate on, // in your case, the buttons // only needed if you need to use the list more than once in your program private readonly IEnumerable 

Dans le constructeur ou le gestionnaire d’événements load:

 this.buttons = this.Controls.OfType 

Et puis, chaque fois que je dois mettre à jour ces contrôles, j’utilise simplement cette collection:

 foreach (var button in this.buttons) { button.Text = @"---"; // may wanna check the name of the button matches the pattern // you expect, if the collection contains other // buttons you don't wanna change } 
 foreach(Control c in this.Controls) { if(c.type==new Button().type) { Button b=(Button)c; b.Text=""; } }