2 votes

Comment puis-je faire cela correctement en c# (Condensation du code)

Je suis terriblement incompétent en programmation, et tout ce que je sais, je l'ai appris en faisant des recherches sur Google.

Je n'arrive pas à trouver les termes exacts à rechercher pour trouver ma réponse, je sais que je l'ai déjà vu, si quelqu'un pouvait juste me dire le nom de ce que j'essaie d'accomplir et un exemple très basique, je l'apprécierais grandement.

Voici mon code,

if (metroButton2.Text == "Tout cocher")
{
    metroCheckBox1.CheckState = CheckState.Checked;
    metroCheckBox2.CheckState = CheckState.Checked;
    //Insérer 58 lignes
    metroCheckBox61.CheckState = CheckState.Checked;
    metroCheckBox62.CheckState = CheckState.Checked;
    metroButton2.Text = "Tout décocher";
    metroTabPage1.Focus();
}
else if (metroButton2.Text == "Tout décocher")
{
    metroCheckBox1.CheckState = CheckState.Unchecked;
    metroCheckBox2.CheckState = CheckState.Unchecked;
    //Insérer 58 lignes
    metroCheckBox61.CheckState = CheckState.Unchecked;
    metroCheckBox62.CheckState = CheckState.Unchecked;
    metroButton2.Text = "Tout cocher";
    metroTabPage1.Focus();
}

S'il vous plaît, merci pour votre temps.

Je ne vois pas en quoi trouver le nom du contrôle est ce que j'essaie de faire ici, je connais tous les noms de contrôle.

Ce que j'essaie de faire, c'est de condenser tout cela

            if (metroButton2.Text == "Tout décocher")
            {
                metroCheckBox1.CheckState = CheckState.Unchecked;
                metroCheckBox2.CheckState = CheckState.Unchecked;
                metroCheckBox3.CheckState = CheckState.Unchecked;
                metroCheckBox4.CheckState = CheckState.Unchecked;
                metroCheckBox5.CheckState = CheckState.Unchecked;
                //Continuez jusqu'à 60 pour les suivants
                metroButton2.Text = "Tout cocher";
                metroTabPage1.Focus();
            }

Tout ce que j'ai fonctionne parfaitement tel quel, j'aimerais juste savoir comment condenser tout cela, de la manière que j'ai demandée, j'ai vu cela fait dans d'autres langages, dois-je créer d'abord une chaîne de caractères et l'exécuter? Je veux exécuter un petit bloc de code qui décochera chacune de ces cases. Si je pouvais juste obtenir un exemple simple comme

if (1<2)
{
    for (int i = 1; i < 62; i++)
    {
        var myVariable = i;
        metroCheckBox["myVariable"].CheckState = CheckState.Unchecked;
    }
}

J'aimerais vraiment savoir comment accomplir quelque chose comme ça

S'il vous plaît et merci.

Aussi, j'utilise une application de formulaire Windows pour cela, je ne sais pas si cela aide, cela semble être une chose basique que je demande, je suis juste trop bête pour trouver la réponse moi-même.

0voto

Onur Tekir Points 128

Vous pouvez cocher et décocher tous les contrôles de case à cocher comme ci-dessous

Pour cocher

foreach(Control control in this.Controls)
{
     if(control.GetType() == typeof(CheckBox) && control.Name.Contains("metroCheckBox"))
     {
          ((CheckBox)control).CheckState = CheckState.Checked;
     }
}

Pour décocher

foreach(Control control in this.Controls)
{
     if(control.GetType() == typeof(CheckBox) && control.Name.Contains("metroCheckBox"))
     {
          ((CheckBox)control).CheckState = CheckState.Unchecked;
     }
}

0voto

Damien_The_Unbeliever Points 102139

Créez un champ dans votre classe pour contenir une référence à tous les contrôles que vous souhaitez basculer ensemble (notez que vous pouvez le faire plusieurs fois si vous voulez avoir une fonctionnalité de style "Tout dans ce groupe" ainsi que "Tout") :

private List _allCheckboxes;

Ensuite, remplissez-le une fois. Généralement juste après que InitialiseComponents a été appelé est un bon endroit :

_allCheckBoxes = new List{
  metroCheckBox1,
  metroCheckBox2,
  /* ... */
};

À défaut, si ce sont vraiment tous les contrôles CheckBox sur le formulaire, quelque chose comme ceci devrait faire l'affaire :

_allCheckBoxes = this.Controls.OfType().ToList();

(en utilisant LINQ) devrait faire l'affaire).

Maintenant, lorsque vous voulez basculer tous les contrôles, vous pouvez utiliser une déclaration foreach pour itérer à travers chaque contrôle et définir sa propriété CheckState (et notez que nous n'avons plus besoin de savoir qu'il y a par exemple 62 éléments si nous utilisons un foreach)

0voto

nabuchodonossor Points 1962

Pour montrer, ce que Guido a déclaré, pour y accéder lorsque dans les sous-panneaux, une approche très simple :

            if (c is CheckBox && c.Name.StartsWith("metroCheck"))
            {
                ((CheckBox)c).CheckState = CheckState.Checked;
            }
            else if (c.HasChildren)
            {
                foreach (Control cc in c.Controls)
                {
                    if (cc is CheckBox && cc.Name.StartsWith("metroCheck"))
                    {
                        ((CheckBox)cc).CheckState = CheckState.Checked;
                    }
                }
            }

Merci, Guido

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X