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.
Jusque là tout va bien.
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); } }
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
Le "sender" qui est le bouton "Clear" n'est pas castable en PictureBox.
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); } }
Dans "EraseBtn_Click" le truc plante à
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 ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2Picture.Name = "pictureBox" + Numero;
Ou une façon quelconque de parvenir à changer toutes les images en une seule fois ?
Merci pour votre aide
Partager