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

Messages postés
13
Date d'inscription
mardi 25 septembre 2007
Dernière intervention
26 novembre 2012
- - Dernière réponse : krimog
Messages postés
1863
Date d'inscription
lundi 28 novembre 2005
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!!!
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
Messages postés
14319
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
11 décembre 2018
3
Merci
Bonjour,

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

Merci NHenry 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 105 internautes ce mois-ci

Commenter la réponse de NHenry
Messages postés
13
Date d'inscription
mardi 25 septembre 2007
Dernière intervention
26 novembre 2012
0
Merci
Super! merci beaucoup ça fonctionne parfaitement.


Gros débutant cherche à progresser :)
Commenter la réponse de merlin1977
Messages postés
1863
Date d'inscription
lundi 28 novembre 2005
Dernière intervention
14 février 2015
0
Merci
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é. -
Commenter la réponse de krimog

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.