CheckBox "Tout cocher ?"

The_Unnamed Messages postés 5 Date d'inscription samedi 10 mars 2007 Statut Membre Dernière intervention 28 août 2009 - 22 août 2009 à 13:52
The_Unnamed Messages postés 5 Date d'inscription samedi 10 mars 2007 Statut Membre Dernière intervention 28 août 2009 - 28 août 2009 à 15:58
Bonjour,

J'en appel à votre aide car cela fait plusieurs heures que je cherche sans succès un moyen "simple" pour réaliser un "simple" CheckBox "Tout cocher ?" qui divra cocher/décocher 10 autres checkbox.

Voila ce que j'ai actuellement :

private void MonCheckBoxToutCocher_CheckedChanged(object sender, EventArgs e)
{
  checkBox1.Checked = chkAllMonthFull.Checked;
  checkBox2.Checked = chkAllMonthFull.Checked;
  checkBox3.Checked = chkAllMonthFull.Checked;
  checkBox4.Checked = chkAllMonthFull.Checked;
  checkBox5.Checked = chkAllMonthFull.Checked;
  checkBox6.Checked = chkAllMonthFull.Checked;
  checkBox7.Checked = chkAllMonthFull.Checked;
  checkBox8.Checked = chkAllMonthFull.Checked;
  checkBox9.Checked = chkAllMonthFull.Checked;
  checkBox10.Checked = chkAllMonthFull.Checked;
}


Cela fonctionne parfaitement, en cliquant sur la checkbox MonCheckBoxToutCocher les 10 checkbox nommées de 1 à 10 sont cochées et inversément. Ce que je voudrais c'est utiliser plutot une boucle "for" du genre:

private void MonCheckBoxToutCocher_CheckedChanged(object sender, EventArgs e)
{
  for (int i = 1; i < 11; i++)
            {
                CheckBox[i].Checked = MonCheckBoxToutCocher.Checked;
            }
}

C'est plus joli, semble moins lourd et puis c'est plus facile à écrire surtout que ca peut servir de fonction (int de départ, int de fin).

Voila, je vous ai exposé mon problème, ça parait bête mais bon, les seules solutions que j'ai trouvé passe par des list ou des datagrid alors que mon but est justement de limiter l'écriture à son minimum.

Merci d'avance
The_Unnamed

10 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
22 août 2009 à 14:04
entre VBFrance, CSharpFr et d'autre forum, ça doit être la 4eme fois que je réponds à cette question cette semaine

En C# je crois que ça doit s'écrire comme ça
this.Controls("CheckBox" & i.ToString).Checked = MonCheckBoxToutCocher.Checked;

[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
0
The_Unnamed Messages postés 5 Date d'inscription samedi 10 mars 2007 Statut Membre Dernière intervention 28 août 2009
22 août 2009 à 14:28
Hello Casy,

Tout d'abords, merci pour cette réponse rapide, malheureusement cela ne fonctionne pas. J'ai essayé plusieurs formes syntaxiques mais sans succès.

Bien à toi
The_Unnamed
0
cs_bellak Messages postés 136 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 5 mai 2011
22 août 2009 à 14:56
essaye de mettre tous les CheckBox dans une liste puis utilise un foreach sur les items de la liste .
0
The_Unnamed Messages postés 5 Date d'inscription samedi 10 mars 2007 Statut Membre Dernière intervention 28 août 2009
22 août 2009 à 15:12
Hello Bellak,

Là ça fonctionne, mais à nouveau, cela suppose que j'écrive dans mon code le nom de chaque checkbox à mettre dans une liste.
Ce que je cherche à savoir c'est s'il est possible d'accéder à un checkbox existant par son nom que je génèrerai dynamiquement pendant l'exécution.
De sorte que si je veux par exemple cocher la checkbox "MonCheckBox10", au lieu de faire;
MonCheckBox.Checked = true;


je voudrais faire un truc du genre:
("MonCheck"+"Box"+"10").Checked = true;


Cela me permettrai de gérer plusieurs controles avec une seule commande et en jouant sur une partie du nom du controle.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_bellak Messages postés 136 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 5 mai 2011
22 août 2009 à 15:51
tu peux les regrouper par la proprieté tag puis tu les parcours par un foreach :
foreach( Control ctrl in this.Controls )
{
        if ( ctrl.Tag == "??" )
            //blabla
}
0
cs_bellak Messages postés 136 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 5 mai 2011
22 août 2009 à 15:54
pardon le code est plutot :
foreach( Control ctrl in this.Controls )
{
if(ctrl.GetType() == typeof(TextBox))
{      
  if ( ctrl.Tag == "??" )
            //blabla
}
}
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
22 août 2009 à 16:25
Salut, la solution de Casy n'est pas mauvaise mais il a un peu mélangé la syntaxe VB et C# .. et la solution de Bellak est incomplète.


public Form1( )
{
    InitializeComponent( );

    CheckBox mainCheckBox = new CheckBox( );
    mainCheckBox.Parent = this;
    mainCheckBox.Location = new Point( 10, 10 ); 
    mainCheckBox.CheckedChanged += delegate
    {
        for( int i = 0; i < 10; i++ )
        {
            ( ( CheckBox )this.Controls[ "checkbox" + i ] ).Checked = mainCheckBox.Checked;
        }
    };
    //mainCheckBox.CheckedChanged += delegate // Autre solution sans nom.
    //{
    //    foreach( Control ctrl in this.Controls )
    //    {
    //        CheckBox checkbox = ctrl as CheckBox;
    //        if ( checkbox != null && checkbox != mainCheckBox )
    //        {
    //            checkbox.Checked = mainCheckBox.Checked;
    //        }
    //    }
    //};

    for ( int  i = 0; i < 10; i++ )
    {
        CheckBox checkbox = new CheckBox( );
        checkbox.Parent = this;
        checkbox.Location = new Point( 10, 40 + 20 * i ); 
        checkbox.Name = "checkbox" + i;
    }
}
0
The_Unnamed Messages postés 5 Date d'inscription samedi 10 mars 2007 Statut Membre Dernière intervention 28 août 2009
23 août 2009 à 00:14
Hello Lutinore,

Merci pour ta solution, je l'ai testé sur un form vièrge et pas de problème, cela fonctionne parfaitement.
Par contre, lorsque je l'utiliser dans une procédure d'événement, çà coince. Je reçois l'erreur "Object reference not set to an instance of an object."
Une idée ?
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
23 août 2009 à 01:13
Le débogueur doit te dire quel est l'objet qui est marqué NULL. Ca peut venir d'un dépassement de capacité dans une boucle ou quelque chose comme ça..
0
The_Unnamed Messages postés 5 Date d'inscription samedi 10 mars 2007 Statut Membre Dernière intervention 28 août 2009
28 août 2009 à 15:58
Re,

Ben en fait, je ne parviens pas à associer le contrôle existant au contrôle[i] "caster" en (CheckBox).
N'y a-t-il vraiment pas moyen d'avoir une variable string qui puisse être utilisée pour agir sur des contrôles existant en fonction de la string qu'elles contiennent ?
Exemple:
// CheckBox1 étant un checkbox existant et inclus dans la form.
String s = "CheckBox1";
CheckBox cb.name = s; //Ici, j'associerais cb à CheckBox1, sorte d'alias.
cb.Checked = true;
0
Rejoignez-nous