Modifier les parametres d'un bouton crée prealablement dynamiquement

Résolu
merlin1977 Messages postés 13 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 26 novembre 2012 - 24 juil. 2011 à 18:56
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 - 25 juil. 2011 à 10:39
Bonjour,
je débute en c# et je suis bien embêté je m'explique :
1/ Je crée des boutons dynamiquement dans la form.
2/l'appuie sur un de ses boutons dynamique devra lancer un code permettant de changer le nom du bouton, et de charger une image de fond que l'utilisateur choisira pour ce bouton.

J'ai fais le code suivant:



 

//le code pour lancer l'ajoute des boutons
private void button1_Click(object sender, EventArgs e)
        {
                   ajouteBouton(5, 2);
        }

//le code pour ajouter les boutons 
public void ajouteBouton(int x, int y)
            {
                int ixposition = 50;
                int iyposition = 50;
                int ixprovisoire = x;
                int inumerobouton = 1;

                while (y != 0)
                {
                    while (x != 0)
                    {

                        Button monbouton = new Button();
                        monbouton.Text = inumerobouton.ToString();
                        monbouton.Width = 100;
                        monbouton.Height = 100;
                        monbouton.Left = 100;
                        monbouton.Top = 100;
                        monbouton.Location = new Point(ixposition, iyposition);
                        Controls.Add(monbouton);
                        monbouton.Visible=true;
                        ixposition = ixposition + 100;
                        x = x - 1;
                        inumerobouton = inumerobouton + 1;
                        monbouton.Click += new EventHandler(bouton_Click);

                    }
                    y = y - 1;
                    iyposition = iyposition + 100;
                    x = ixprovisoire;
                    ixposition = 50;
                }

            }

            
//le code qui m'interesse c'est depuis là que je dois pouvoir charger une image dans le bouton dynamique ou j'ai cliqué
public void bouton_Click(object sender, EventArgs e) 
            {
               

monbouton.Image = new Bitmap("E:/1.PNG");
               
              
            //}
        }


Voilà donc pour résumer je clic sur un bouton crée dynamiquement et je veux pouvoir y charger une image de fond.
Et là je bloque.....
si quelqu'un sait comment faire :)
Merci!!!

3 réponses

NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
24 juil. 2011 à 19:16
Bonjour,

Et en testant :
((Button)sender).Image = new Bitmap("E:/1.PNG");

3
merlin1977 Messages postés 13 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 26 novembre 2012
24 juil. 2011 à 19:26
Super! merci beaucoup ça fonctionne parfaitement.


Gros débutant cherche à progresser :)
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
25 juil. 2011 à 10:39
Salut

Je vais juste un peu développer la réponse.

Une variable/référence n'existe qu'à l'intérieux des accolades où elle a été déclarée. En l'occurrence, la référence "monbouton" est détruite à la fin du while (ce n'est que la référence qui est détruite, pas le bouton, hein ). Pour cette raison, tu ne peux pas utiliser cette référence ailleurs.

Pour modifier ce bouton, il faut que tu retrouves une référence vers lui. Les événements renvoient quasiment toujours, comme premier argument, une référence vers l'objet ayant levé cet événement (pour le clic sur un bouton, l'objet est évidemment le bouton). C'est le fameux "sender" dont il est question dans le code de NHenry (il ne faut cependant pas oublier de faire un cast en "Button" pour pouvoir accéder à ses propriétés telles que "Image".

Simple remarque concernant ces lignes :
x = x - 1;
inumerobouton = inumerobouton + 1;
y =  y - 1;

Généralement, on préfèrera utiliser les opérateurs d'incrémentation et de décrémentation (ce qui fait exactement la même chose)
x--;
inumerobouton++;
y--;


Quant à cette ligne :
iyposition  = iyposition + 100;

Il est aussi possible de condenser le code ainsi :
iyposition += 100;


En ce qui concerne tes "while", des "for" auraient été plus appropriés :
for (/* Pas besoin d'initialisation */; y > 0; y--)
{
    for (; x > 0; x--)
    {
        // Même code en enlevant les lignes x x - 1; et y y - 1;
    }
}


Voire même, vu que tes x et y ne sont pas utilisés dans la boucle :
public void ajouteBouton(int x, int y)
{
    inumerobutton = 1;
    for (iyposition = 50; iyposition < 50 + 100 * y; iyposition += 100)
    {
        for (ixposition = 50; ixposition < 50 + 100 * x; ixposition += 100)
        {
            Button monbouton = new Button();
            monbouton.Text = inumerobouton.ToString();
            monbouton.Width = 100;
            monbouton.Height = 100;
            monbouton.Left = 100;
            monbouton.Top = 100;
            monbouton.Location = new Point(ixposition, iyposition);
            Controls.Add(monbouton);
            monbouton.Visible=true;
            monbouton.Click += new EventHandler(bouton_Click);
            inumerobouton++;
        }
    }
}

Je ne sais pas ce que tu en dis, mais de mon côté, je trouve ça plus simple.

Dernière chose :
"E:/1.PNG"

Sous Windows, les répertoires sont séparés par des \ et non des /. Même si ça marche avec /, autant être rigoureux :
"E:\\1.PNG"
// ou encore
@"E:\1.PNG"


Ce ne sont que de minuscules remarques, mais j'espère qu'elles pouront t'aider.

Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
0
Rejoignez-nous