Picturebox, apelle celle qui est donnée dans une textbox [Résolu]

Signaler
Messages postés
104
Date d'inscription
mardi 14 avril 2009
Statut
Membre
Dernière intervention
7 avril 2019
-
Messages postés
104
Date d'inscription
mardi 14 avril 2009
Statut
Membre
Dernière intervention
7 avril 2019
-
Bonjour,

Voilà j'ai un petit problème que je n'arrive pas à résoudre, j'ai fait des recherches sur google sans succès.

Je vais essayer d'être la plus claire possible.
J'ai un nombre/chiffre N, compris entre 1 à 20 qui apparait dans une textbox, de ce N je voudrai que la pictureBoxN devienne null .
C'est à dire :
- si la textbox donne 3, la pictureBox3.Image = null;
- si la textbox donne 7, la pictureBox7.Image = null;

Je ne sais pas si je me fais bien comprendre.

Merci de votre attention et bonne soirée.

2 réponses

Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
42
Salut

Tu as plusieurs solutions :
- La première, la plus propre et la plus performante, c'est de faire un tableau de pictureBox.
PictureBox[] tableau = new PictureBox[20];
// Puis initialisation des éléments du tableau, et ensuite tu peux faire ça :
tableau[Convert.ToInt32(textBox1.Text)].Image = null;


- La deuxième, qui ne fonctionne qu'avec WinForms, c'est d'accéder au contrôle par son nom.
((PictureBox)this.Controls["pictureBox" + textBox1.Text]).Image = null;


- La dernière, qui fonctionne dans tous les cas A CONDITION QUE L'ELEMENT EN QUESTION SOIT PUBLIC (donc il faudrait mettre toutes tes PictureBoxX public, mais qui n'est ni performante ni simple, c'est d'utiliser la réflexion.
// En haut, dans les using, tu ajoutes
using System.Reflection;

// Là où tu veux modifier la propriété
// On commence par récupérer le type de ta fenêtre
Type t = this.GetType();
// On prépare la recherche d'un champ public nommé comme tu veux
FieldInfo fi = t.GetField("pictureBox" + textBox1.Text);
// On récupère le champ de la fenêtre actuelle et on modifie la valeur
((PictureBox)fi.GetValue(this)).Image = null;


La dernière solution est intéressante à connaître, mais à éviter tant que possible pour des raisons de performance (mais elle est parfois indispensable).

Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
Messages postés
104
Date d'inscription
mardi 14 avril 2009
Statut
Membre
Dernière intervention
7 avril 2019
1
Merci beaucoup.
J'ai choisi cette solution :
((PictureBox)this.Controls["pictureBox" + textBox1.Text]).Image = null;


Merci encore.