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
41
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
42
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
42
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