Evement sur image dynamque

Résolu
sebcrash Messages postés 8 Date d'inscription mardi 23 mai 2006 Statut Membre Dernière intervention 19 mars 2008 - 25 févr. 2008 à 20:58
sebcrash Messages postés 8 Date d'inscription mardi 23 mai 2006 Statut Membre Dernière intervention 19 mars 2008 - 26 févr. 2008 à 11:52
voila dans mon programme je crée des images dynamiquement
chaque image a une valeur
exemple (j'ai quatre image, quand je double clic sur la 1er ca me renvoye 1, quand je double click sur la 2eme ca me renvoye 2, etc.)
Le problème c'est qu'il me renvoye toujours la valeurs de la dernieres image crée (dans l'exemple il me renvoye toujours 4)

comment je peu faire ? voici 1 bout de mon code :

 for (int i = 0; i < Fmagic.remoteMethode.getnbMainJoueur(numJoueur); i++)
            {
                PictureBox pct = new PictureBox();
                pct.Name = "pct"+i;
                pct.Location = new Point(300+(i*72),660);
                pct.BackgroundImageLayout = ImageLayout.Stretch;
                pct.Size = new Size(70, 100);
                string url = Fmagic.remoteMethode.getNomCarteMainJoueur(numJoueur, i);
                pct.BackgroundImage = Image.FromFile("images/" + url + ".jpg");
                pct.Click += delegate
                {
                    pictureBox1.BackgroundImage = Image.FromFile("images/" + url + ".jpg");
                };
                pct.DoubleClick += delegate
                {
                    Fmagic.remoteMethode.jouerUneCarteJoueur(numJoueur, i);
                    this.Controls.Clear();
                    Fmagic.remoteMethode.setModif();
                };
                this.Controls.Add(pct);
            }

meric d'avance :)

6 réponses

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
25 févr. 2008 à 23:37
Pas de tuto , mais pour comprendre le code généré par le compilo, télécharge Reflector . Analyse le code sans délégué, puis avec une méthode anonyme pour voir la différence et puis avec une méthode anonyme qui  utilise une variable locale ( comme dans ton code plus haut ) une classe <>c__DisplayClass est créée pour capturer la variable.

Pour supprimer le contrôle :

this.Controls.Remove( myCtrl ) // ou RemoveAt( .. )
myCtrl.Dispose( );
myCtrl = null;
3
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
25 févr. 2008 à 23:43
public partial class Form1 : Form
{
    public Form1( )
    {
        InitializeComponent( );


        for ( int i = 0; i < 4; i++ )
        {
            PictureBox pb = new PictureBox( );
            pb.Size = new Size( 100, 50 );
            pb.Location = new Point( 0, i * 50 );
            pb.BorderStyle = BorderStyle.Fixed3D;
            pb.Parent = this;
            pb.Tag = i; // <<
            pb.Click += PictureBox_Click;
        }
    }


    private void PictureBox_Click( object sd, EventArgs args )
    {
        MessageBox.Show( ( ( PictureBox )sd ).Tag.ToString( ) );
    }
}
3
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
25 févr. 2008 à 22:07
Salut, n'utilise pas les méthodes anonymes dans ce cas là, car le compilateur est obligé de capturer la variable, "i", c-à-d qu'il crée une classe pour maintenir cette variable.
0
sebcrash Messages postés 8 Date d'inscription mardi 23 mai 2006 Statut Membre Dernière intervention 19 mars 2008
25 févr. 2008 à 22:33
aurais tu 1 p'tit exemple ? ou un p'tit tuto
j'aimerai egalement pouvoir supprimer ce controle une fois que l'on double click dessus
0

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

Posez votre question
sebcrash Messages postés 8 Date d'inscription mardi 23 mai 2006 Statut Membre Dernière intervention 19 mars 2008
26 févr. 2008 à 10:44
merci beaucoup ca marche nickel, une derniere petite question si je peu t'embeter comment effacer tout les controls crée dynamiquement sens effacer les autres controles sur la form pas le controls.clear() :(
0
sebcrash Messages postés 8 Date d'inscription mardi 23 mai 2006 Statut Membre Dernière intervention 19 mars 2008
26 févr. 2008 à 11:52
c'est bon j'ai trouvé, merci de ton aide :)
0
Rejoignez-nous