Bonjour,

J'ai une série de PictureBox dont les images changent lorsque l'on clique dessus (on/off), chacune individuellement.
Les PictureBox représentent des numéros, et, au clic, en plus du changement d'image, le numéro correspondant est également soit ajouté soit retiré d'une liste string (nommée Combi dans le code ci-dessous).

J'utilise une méthode commune pour traiter l'état on/off de chaque image suite au clic

Le principe :
Les noms des PictureBox comportent le numéro de l'image qu'elles doivent afficher.
Par exemple "pictureBox6", affichera soit l'image "6.png" soit l'image "6b.png"
Dans le code ci-dessous le clic sur l'image affichera alternativement Regular_Image ou Regular_Image + "b" suivant l'image déjà affichée.


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
 
        private void Common_Number_Click(object sender, EventArgs e)
        {
 
 
            Shift_Number(sender);
            // d'autres trucs 
 
        }
 
        private void Shift_Number (object sender)
        {
            string name = (sender as System.Windows.Forms.Control).Name;
 
 
            string Regular_Image = name.Substring(10); // extraction du numéro d'image à partir du nom de la PictureBox
            string ShiftImage = Regular_Image + "b";
 
            var pictureBox = sender as PictureBox;
 
            if (pictureBox.Image.Tag.ToString() == Regular_Image)
            {
 
                    Bitmap image = (Bitmap)Tyest.Properties.Resources.ResourceManager.GetObject(ShiftImage);
                    pictureBox.Image = image;
                    pictureBox.Image.Tag = Regular_Image + "b";
 
                    Combi.Add(Regular_Image);
 
 
            }
            else
            {
 
                Bitmap image = (Bitmap)Tyest.Properties.Resources.ResourceManager.GetObject(Regular_Image);
                pictureBox.Image = image;
                pictureBox.Image.Tag = Regular_Image;
 
                Combi.Remove(Regular_Image);
 
            }
        }
Jusque là tout va bien.

Mais, si je souhaite à l'aide d'un bouton "Clear" mettre toutes les image sur "OFF" en une seule fois, comment faire pour entrer dans ces méthodes avec le bon objet "sender" ?
Elles sont toutes deux basées sur un type d'expéditeur PictureBox.

Le code suivant ne fonctionne évidemment pas
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
        private void EraseBtn_Click(object sender, EventArgs e)
        {
 
            foreach (string Numero in Combi) // Combi est la liste des numéros sur ON (variable globale)
            {
                var Picture = sender as PictureBox;
                Picture.Name = "pictureBox" + Numero;
                Common_Number_Click(Picture, e);
            }
        }
Le "sender" qui est le bouton "Clear" n'est pas castable en PictureBox.

Dans "EraseBtn_Click" le truc plante à
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
Picture.Name = "pictureBox" + Numero;
Il y-a-t'il un moyen de créer dans ma méthode un object PictureBox, puis le renommer avec le nom de la bonne PictureBox (réelle) dont je veux changer l'image ?
Ou une façon quelconque de parvenir à changer toutes les images en une seule fois ?

Merci pour votre aide