Gérer des évènements depuis des controls créés dynamiquement

Résolu
whombat Messages postés 188 Date d'inscription mercredi 12 octobre 2005 Statut Membre Dernière intervention 19 novembre 2011 - 12 oct. 2011 à 11:46
whombat Messages postés 188 Date d'inscription mercredi 12 octobre 2005 Statut Membre Dernière intervention 19 novembre 2011 - 12 oct. 2011 à 18:58
Bonjour à tous,

Je recherche comment je pourrais gérer des évènements depuis des controls créés dynamiquement. J'ai bien sûr fait un tour sur le site mais rien ne semble me correspondre (je suis en vb 2010).

J'ai bien étudié, et essayé de mettre en pratique, le 'WithEvents' mais je sèche. Mon script est simple : sur une form se trouvent des colonnes de petites PictureBox qui, chacune, a pour BackColor l'une des couleurs du System.Drawing.Color. Je voudrais que, si l'utilisateur clique sur une PictureBox, cela me renvoie la couleur choisie (le BackColor quoi...).

J'ai en parallèle des Labels qui indiquent, pour chaque PictureBox, le nom de la couleur. Pareil, si j'obtiens la couleur comme vu plus haut je saurais obtenir le nom, et l'inverse.

J'ai cherché dans System.Windows.Forms.Controls dans l'aide de Microsoft mais il y a bien 'presque' tous les Controls sauf le PictureBox. Je suppose donc que je ne vais pas pouvoir trouver une options sur la base de la collection de controls.

Quelqu'un aurait une idée ? Merci de votre aide.

Cordialement,

Whombat.

Prédire l'avenir est particulièrement aléatoire, 
surtout lorsqu'il s'agit du futur.

5 réponses

cs_lim Messages postés 329 Date d'inscription jeudi 20 novembre 2003 Statut Membre Dernière intervention 10 mai 2014 7
12 oct. 2011 à 15:37
Salut,

Pour chacune des tes pictures box il faut que tu ajoutes un évennement avec AddHandler

Soit une 2 picturebox

Friend WithEvents pict As New PictureBox
Friend WithEvents pict2 As New PictureBox

Dans le load de la fenêtre

'Picture 1
pict.Location = New Point(10, 10)
pict.Size = New Size(50, 50)
pict.BackColor = Color.AliceBlue
'Picture 2
pict2.Location = New Point(100, 100)
pict2.Size = New Size(50, 50)
pict2.BackColor = Color.Azure
'Ajouter les controles à la form
Me.Controls.Add(pict)
Me.Controls.Add(pict2)
'Ajoute l'écouteur pour un clic sur une picture (le même pour les 2)
AddHandler pict.Click, AddressOf monclick
AddHandler pict2.Click, AddressOf monclick

'Déclaration de l'écouteur
Private Sub monclick(ByVal sender As System.Object, ByVal e As System.EventArgs)
'Affiche dans une messagebox la couleur de fond de la picturebox
MessageBox.Show(CType(sender, PictureBox).BackColor.ToString)
End Sub



En espérant que cela puisse t'aider à avancer

@+LIM
3
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
12 oct. 2011 à 12:31
0
whombat Messages postés 188 Date d'inscription mercredi 12 octobre 2005 Statut Membre Dernière intervention 19 novembre 2011
12 oct. 2011 à 13:04
Tout d'abord, merci pour la réponse.

Ouh La La...

Certes, j'avais déjà étudié ce genre de débat sur le forum et, bien sûr, lu attentivement la doc Microsoft. Mais ce n'est rentré qu'à moitié. J'arrive a avancer seul quand je comprends. Et là, je ne comprends pas tout. C'est flou. Du coup j'ai du mal à avancer.

En fait, chaque PictureBox a un nom. Je pensais créer sur la première PictureBox l'évènement click et en handles mettre la List pour que cet evènement fonctionne quelque soit l'index de la List.
quelque chose du genre :
Sub Pic1_Click(sender As System.Object, e As System.EventArgs) Handles ListPict(Index)
mais ça ne fonctionne pas, bien sûr, pourtant là j'aurais compris. Je crois qu'il y a 2 pb (au moins...) : le script ne comprend pas (je m'exprime mal...) que Pic1 est un élément de la ListPict et le 2ème pb : Index n'est pas défini et donc il ne peut pas le considérer comme variable (variable au sens ou il l'accepterait que Index = 2 ou Index=53)

Et enfin, cerise sur le gateau, je vois que la moitié des gens qui ont posté ou réalisé des scripts sur ce site utilisent une List(Of). Ce n'est pas (pas encore) mon cas. Je ne sais pas si c'est important, je n'arrive pas à comprendre comment ça fonctionne. J'ai l'habitude de VB4 et là c'était limpide. Ici je suis dans le brouillard...



Cordialement,

Whombat.

Prédire l'avenir est particulièrement aléatoire, 
surtout lorsqu'il s'agit du futur.
0
whombat Messages postés 188 Date d'inscription mercredi 12 octobre 2005 Statut Membre Dernière intervention 19 novembre 2011
12 oct. 2011 à 13:44
Un rectificatif par rapport à mon post précédent : tout comme Mr Jourdain, j'utilise des List(T) naturellement (et par logique). Les lignes que j'ai écrites étaients dues à celles lues avant dans différents messages ou scripts du site où les explications données (parfois) relevaient plus de l'initiation ésotérique que de la logique. J'étais donc bel et bien noyé.

Je passe déjà assez comme cela pour un innocent, il est inutile que j'en rajoute (hi hi hi) alors, s'il vous plaît, ne tenez pas compte des lignes sus-dites.

Il n'en demeure pas moins que mon problème est bien réel. Et toujours là.

Cordialement,

Whombat.

Prédire l'avenir est particulièrement aléatoire, 
surtout lorsqu'il s'agit du futur.
0

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

Posez votre question
whombat Messages postés 188 Date d'inscription mercredi 12 octobre 2005 Statut Membre Dernière intervention 19 novembre 2011
12 oct. 2011 à 18:58
Super !

et grand merci. Pour ces quelques lignes, bien sûr, qui vont définitivement m'apporter une aide précieuse, mais surtout pour la façon dont elles sont commentées. J'ai tout compris. En fait, expliqué comme ça, c'est, me semble-t-il assez simple.

Preuve, s'il en est, que quand on veut on peut transmettre le savoir et da façon intelligible... Oui, je me sens tout de suite plus intelligent (en plus de soulagé et de reconnaissant.)

Merci encore.

Cordialement,

Whombat.

Prédire l'avenir est particulièrement aléatoire, 
surtout lorsqu'il s'agit du futur.
0
Rejoignez-nous