Je ne pense pas avoir posé la question assez bien, alors voici une explication. Je veux créer des boutons de manière invisible lorsque Form1 se charge, au lieu de les changer individuellement, existe-t-il un moyen de tous les changer avec moins de lignes de code?

Remarque: je ne souhaite pas modifier tous les boutons, mais seulement une certaine plage.

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        button1.Visible = true;
        button2.Visible = true;
        button3.Visible = true;
        button4.Visible = true;
        button5.Visible = true;
        button6.Visible = true;
        button7.Visible = true;
    }

Je veux dire par là, est-il possible de changer la visibilité de ces boutons sur true sans les écrire un par un?

button1 - button7.Visible = true;

Quelque chose comme ça..

-1
Jaan Suur 27 janv. 2019 à 21:20

3 réponses

Meilleure réponse

Si vous essayez de modifier uniquement une certaine plage de boutons, en supposant qu'ils soient tous simplement appelés bouton [x], vous pouvez créer une fonction comme celle-ci:

    private void toggleButtons(int start, int end, bool trueOrFalse)
    {
        for(int x=start; x <= end; x++)
        {
            this.Controls.OfType<Button>().Where(b => b.Name == "button" + x.ToString()).SingleOrDefault().Visible = trueOrFalse;
        }
    }

Ensuite, vous pouvez l'appeler comme ceci en utilisant (startNo, endNo, true / false pour la visibilité)

toggleButtons(1, 7, false);
1
Nathan Champion 27 janv. 2019 à 18:36

Vous pouvez utiliser le Controls pour obtenir tous les contrôles d'un formulaire. Par exemple:

foreach(var button in this.Controls.OfType<Button>())
{
    button.Visible = false;
}
0
DavidG 27 janv. 2019 à 18:23

Si vous souhaitez modifier la visibilité de tous les boutons du formulaire, vous pouvez le faire.

foreach(var button in Controls.OfType<Button>())
{
   button.Visible = false; // or true, depending what you want to set
}

Si vous ne souhaitez pas modifier la visibilité de tous les boutons du formulaire et si vous devez filtrer les boutons en fonction de certains critères, vous pouvez également le faire. Par exemple, si vous souhaitez filtrer les boutons dont le nom commence par "specialButton",

foreach(var button in this.Controls.OfType<Button>().Where(x=>x.Name.StartsWith("specialButton")))
{
   button.Visible = false;
}

De même, vous pouvez également filtrer en fonction d'autres propriétés.

Une autre option consiste à inscrire les boutons qui doivent être modifiés dans une liste. Par exemple, si vous ne devez modifier que bouton1 et bouton2 d'un formulaire comprenant 10 boutons, vous pouvez

var list = new[] { button1, button2 };
foreach (var item in list)
{
   item.Visible = false;
}
0
Anu Viswan 27 janv. 2019 à 18:36