Gestionnaires d'événements

Soyez le premier à donner votre avis sur cette source.

Vue 9 823 fois - Téléchargée 1 117 fois

Description

Un exemple qui explique comment créer de nouveaux contrôles dynamiquement (Un bouton ici) et surtout, comment associer à ce nouveau contrôle
des événements en le rattachant à un gestionnaire d'événement existant. En bref:

- Le bouton n'existe pas,
- on le crée dynamiquement,
- Lorsqu'on clique dessus, une action relative à ce dernier est générée.

Il s'agit vraiment d'un exemple très simple qui illustre l'utilisation de la méthode addHandler.
Il n'y avait pas de niveau 0 sinon je l'aurais mis.
Voilà pour bien comprendre, suivez les instructions du fichier PDF fourni avec les sources.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
8
Date d'inscription
mercredi 31 décembre 2008
Statut
Membre
Dernière intervention
2 mai 2012

Je viens de découvrir un truc très intéressant et puisque ça n'était pas clairement mentionné.. Bref voili voilou, j'ai un peu cherché et fini par trouver.
Euhh pour info, je suis sous VISUAL STUDIO 2010

Dans un GROUPBOX "dur", je crée un objet PANEL dynamiquement.
Ensuite je crée un certain nombre de PICTUREBOX dans ce même panel.

Pour gérer l'évènement de clic sur l'un des nombreux PICTUREBOX pour savoir lequel j'ai cliqué, j'ai fais comme ça :

Private Function CreationBlocs(ByVal nombre As Int32, ByVal L As Int32, _
ByVal H As Int32, ByVal inter As Int32, _
ByVal monpanel As Panel)
' Création des pictureboxes de visualisation video
Dim start As Int32 = 1

monpanel.SuspendLayout()
Application.DoEvents()

For HT As Int32 = 0 To nbElmts_Hauteur -1
For PosL As Int32 = start To start + nbElmts_Hauteur
Dim Box As New PictureBox
Box.Name = "box_" & nombre
Box.Size = New Size(L, H)
Box.BorderStyle = BorderStyle.FixedSingle
Box.SizeMode = modeZoom

Box.Location = New Point(3 + ((PosL - start) * (L + inter)), 3 + (HT * (H + inter)))
monpanel.Controls.Add(Box)
AddHandler Box.Click, AddressOf MonCadre_Click

Next
start += nbElmts_Hauteur + 1
Next
monpanel.ResumeLayout()
End Function

Sub MonCadre_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim cadre As PictureBox
cadre = CType(sender, PictureBox)

Dim numCadre As Control = CType(sender, PictureBox)
MsgBox(numCadre.TabIndex) ' Renvoie l'index de l'objet "enfant" quand on clique dessus

' Maintenant je peux manipuler le contenu de mon PICTUREBOX, vers une autre fonction......
End Sub
Messages postés
67
Date d'inscription
jeudi 26 juin 2008
Statut
Membre
Dernière intervention
11 mai 2010

Merci pour le code! C'est un bon point de départ pour ce que je voulais faire!
Messages postés
28
Date d'inscription
dimanche 29 avril 2007
Statut
Membre
Dernière intervention
27 août 2008

merci beaucoup Mr j'espere que tu va bien
Messages postés
115
Date d'inscription
samedi 15 février 2003
Statut
Membre
Dernière intervention
18 mai 2008

Mouais .. je pensais à ca aussi, mais s'il y a 100 boutons à créer, faut choisir 100 noms différents pour la propriété Name.

J'ai vu aussi la propriété AccessibleName pour faire la même chose.

Bon ben, si il n'y a que cette manière (tester les boutons dans une boucle sans pouvoir l'appeler directement en une ligne, genre item ...) je ferai comme ca.

Merci.

A+
Messages postés
136
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
13 avril 2009

A l'aide d'une boucle For Each qui passe en revue tous les contrôles et effectue un test sur le nom, exemple:

Dim Controle As Control
For Each Controle In Me.Controls
If Controle.Name = "bouton4" Then
'Traitement
Exit For
End If
Next Controle

bouton4 étant bien entendu l'un des boutons créé dynamiquement.
Afficher les 8 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.