Boutton paramètrable

Résolu
cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008 - 31 déc. 2005 à 14:51
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 - 5 janv. 2006 à 10:22
Bonjour,

Je cherche à changer la couleur de mes boutons en fonction d'une variable. Je m'explique : j'ai une variable i, si celle ci vaux 1 je veux que ça soit le bouton 1 qui change de couleur, si elle vaux 2, je veux que le bouton 2 change de couleur,... Evidement je pourrait faire un "if" pour chaque bouton mais je trouve ça un peu brutal étant donné le nombre de bouton que j'ai. J'ai donc cherché faire un truc du style :

button[i].BackColor = myColor

où i € IN (est un entier positif)

malheureusement ça ne marche pas... j'ai aussi essayé de concaténer mais sans succès :-(

Pourriez-vous m'indiquer si il existe une manière de faire cela en C# ?

Mathmax

18 réponses

MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
4 janv. 2006 à 21:40
button1 se trouve-t-il bien dans this.Controls ?

Mx
3
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
31 déc. 2005 à 15:09
Bien sûr ( si j'ai bien compris la question ) mais tu dois créer un tableau de boutons, pour utiliser l'opérateur [ ].

Button[ ] buttons = new Button[ 10 ];
buttons[ 0 ].BackColor = Color.Black;
0
cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008
31 déc. 2005 à 15:37
Ok mais

Button[ ] buttons = new Button[ 10 ];

ne semble pas créer un tableau de bouton... j'obtient un tableau de dimension 10 mais avec ses 10 cases vides...

Mathmax
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
31 déc. 2005 à 16:04
buttons[0] = le1erbouton;
buttons[1] = le2emebouton;
buttons[2] = le3emebouton;
...
buttons[0].BackColor = Color.Black;

/*
coq
MVP Visual C#
*/
0

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

Posez votre question
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
31 déc. 2005 à 16:49
Ah oui j'ai oublié de preciser qu'il faut instancier chaque boutons avec l'opérateur new ou alors affecter une référence comme le montre Coq.. désolé
0
cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008
31 déc. 2005 à 18:54
Oui mais en fait le truc c'est que c'est justement ce que je voulais éviter de faire, appeller les boutons en les énumérant tous. Donc ici la table ne me sert plus à rien puisque je peux les appeler directement, c'est aussi long que de rentrer les noms uns à uns dans un tableau et d'acceder ensuite aux éléments du tableau. En fait ce que je pensais faire pour éviter d'énumerer tous les noms des boutons est la chôse suivante : comme mes noms de boutons sont : button1, button2, button3...., je voulais savoir si il était possible de les appeler directement en concaténant le mot button et la variable i ? IN. Un peu comme si on appelait les boutons par des strings et qu'on écrivait :
"button" + i pour les appeler. Malheureusment ce n'est pas le cas, mais peut-être existe t-il une autre solution ?

Mathmax
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
31 déc. 2005 à 19:11
Directement dans le code, c'est impossible de faire qqch du genre (button+i).BackColor.
Par contre c'est faisable en utilisant la Reflection, si les instances sont membres de la classe du formulaire (pas si les boutons sont générés dynamiquement). Enfin là je ne suis pas sûr que la mise en place du mécanisme te fasse gagner du temps par rapport au "remplissage" du tableau.
Si ils sont générés dynamiquement alors rien ne s'oppose à l'utilisation d'une collection, et plus particulièrement d'une collection de type HashTable pour bénéficier du mécanisme clé/valeur : nom ("button1") en clé, instance en valeur.

/*
coq
MVP Visual C#
*/
0
cs_Nurgle Messages postés 1642 Date d'inscription samedi 6 novembre 2004 Statut Membre Dernière intervention 28 avril 2011 4
31 déc. 2005 à 20:14
Salut,
pourquoi pas un truc du genre :

for (int i = 0; i < 10; i++)
{
((Button)this.Controls["button" + i]).BackColor = ...
}

non ?

Nurgle
Bonne année !
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
1 janv. 2006 à 13:21
Au passage on note l'apparition en .NET 2.0 du nouvel indexeur de la classe ControlCollection et de la méthode Find qui rend obsolète ma méthode FindControl à laquelle je renvoie si souvent :(
0
cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008
4 janv. 2006 à 18:15
Nurgle, ton truc m'intéresse beaucoup ! C'est exactement ce que je veux faire. Seulement voilà ça ne marche pas dans mon programme et je ne comprends pas d'où viens le problème. J'obtiens le message suivant : " Object reference not set to an instance of an object." Sais-tu quel est mon problème ?


Mathmax
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
4 janv. 2006 à 18:29
Certainement que tu essaies d'acceder a un bouton non instancié

Mx
0
cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008
4 janv. 2006 à 19:20
Je ne sais pas si mon bouton est instancié. Je croyais que écrire :


private
void button4_Click(
object sender,
EventArgs e){}

suffisait à instancier mon button4.

Comment faire alors pour l'instancier ?

Faut-il écrire :

button4 Mybutton4 = new button4;

?


Mathmax
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
4 janv. 2006 à 19:34
Button button4 = new Button();

Mx
0
cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008
4 janv. 2006 à 20:31
Désolé j'obtiens toujours le même message en rajoutant cette ligne.


Mathmax
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
4 janv. 2006 à 20:32
Envoie nous le code incriminé !

Mx
0
cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008
4 janv. 2006 à 21:37
C'est bizzare, je viens de recréer une application windows pour te donner un bout de code court de mon programme (celui d'origne étant trop long) avec exactement les mêmes éléments qui entrent en jeux pour la coloration du bouton. Et là ça marche !! Malheureusement, après mainte et mainte vérifications je ne comprends toujours pas pourquoi ça ne marche toujours pas dans le programme d'origine. Ce qui est le plus étrange est que l'instance de mon bouton éxiste bien car quand j'écris :
button1.BackColor = ... ça marche

mais pas quand j'ai :
((Button)this.Controls["button1"]).BackColor = ...

???


Mathmax
0
cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008
4 janv. 2006 à 22:40
Ok merci tu m'as éclairé. En fait j'avais mis mes boutons dans un groupbox, donc en écrivant :


((
Button)
this.groupBox1.Controls[
"button1"]).BackColor =... au lieu de


((
Button)
this.Controls[
"button1"]).BackColor =

ça marche !!

Merci encore :-)

Mathmax
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
5 janv. 2006 à 10:22
Pas de quoi

Mx
[ MVP C# ]
0
Rejoignez-nous