Modifier les parametres d'un bouton crée prealablement dynamiquement [Résolu]

Signaler
Messages postés
13
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
26 novembre 2012
-
Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
-
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!!!
A voir également:

3 réponses

Messages postés
14799
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
13 juin 2021
156
Bonjour,

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

Messages postés
13
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
26 novembre 2012

Super! merci beaucoup ça fonctionne parfaitement.


Gros débutant cherche à progresser :)
Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
48
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é. -