Gérer les événements d'un controle dynamique [Résolu]

Noxid 78 Messages postés lundi 13 mai 2002Date d'inscription 4 mai 2008 Dernière intervention - 26 mai 2007 à 12:53 - Dernière réponse : mimiZanzan 309 Messages postés lundi 27 février 2006Date d'inscription 17 décembre 2017 Dernière intervention
- 29 mai 2007 à 02:45
Bonjour à tous !

Mon application VB6 crée des controles dynamiques sur ma feuille par la méthode suivante :




Dim newControl As VB.Control
Set newControl = Me.Controls.Add("VB.CommandButton", "btnOK")





Ce code crée donc un CommandButton nommé "btnOK".
Comment gérer les événements de btnOK qui est donc créé dynamiquement? J'entends par là détecter le click par exemple.

Merci de votre aide !
Bien cordialement,
Joffrey
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
mimiZanzan 309 Messages postés lundi 27 février 2006Date d'inscription 17 décembre 2017 Dernière intervention - 27 mai 2007 à 16:12
3
Merci
D'abord, tu ne crées pas ici de module de classe: tu utilises simplement le module de ton userform (qui est en réalité aussi un module de classe...)
Ensuite, il suffit seulement de déclarer chaque type de contrôle au niveau du module form, par ex:
Dim WithEvents newTxtBox As VB.TextBox
Dim With Events lb as VB.Label
etc
Par contre, tu n'auras qu'un seul exemplaire de chaque contrôle disponible.
Sinon, il faut en effet passer par un module de classe, car on ne peut pas déclarer de tableau avec l'instruction "WithEvents".
Le type VB.Control est trop vague pour créer un contrôle.Il faut seulement l'utiliser pour balayer l'ensemble des contrôles de la form, par ex
Dim ctl as VB.Control
For Each ctl in Me.Controls
   Msgbox ctl.Name
Next

mimizanzan

Merci mimiZanzan 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 99 internautes ce mois-ci

Commenter la réponse de mimiZanzan
Meilleure réponse
mimiZanzan 309 Messages postés lundi 27 février 2006Date d'inscription 17 décembre 2017 Dernière intervention - 29 mai 2007 à 02:45
3
Merci
On ne peut pas déclarer de tableau avec l'instruction "WithEvents"!

Voir ma source GESTION USERFORM AVEC GROUPE DE BOUTONS DYNAMIQUES SOUS VBA pour gérer un tableau de boutons dynamiques.
On peut aussi utiliser une collection à la place du tableau, comme dans ma source CRÉATION DE CONTRÔLES DYNAMIQUE.

mimizanzan

Merci mimiZanzan 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 99 internautes ce mois-ci

Commenter la réponse de mimiZanzan
mimiZanzan 309 Messages postés lundi 27 février 2006Date d'inscription 17 décembre 2017 Dernière intervention - 26 mai 2007 à 23:07
0
Merci
Très facile: il faut déclarer le contrôle au niveau module avec évènements:

Dim WithEvents newControl As VB.CommandButton


Private Sub Form_Load()
Set newControl = Me.Controls.Add("VB.CommandButton", "btnOK")
With newControl
    .Left = (Me.ScaleWidth - newControl.Width) / 2
    .Top = Me.ScaleHeight - newControl.Height - 200
    .Caption = "OK"
    .Visible = True
End With
End Sub


Private Sub newControl_Click()
MsgBox "C'est le contrôle " & newControl.Name

mimizanzan
Commenter la réponse de mimiZanzan
Noxid 78 Messages postés lundi 13 mai 2002Date d'inscription 4 mai 2008 Dernière intervention - 27 mai 2007 à 12:53
0
Merci
Merci pour ta réponse !

En fait, j'ai déjà essayé comme ça... Mais là mon problème est que je veux pouvoir créer n'importe quel contrôle dynamiquement. Le type VB.Control est donc bien adapté puisqu'il me permet de créer dynamiquement TextBox, CommandButton,...enfin tous les contrôles de VB6 !

En prenant ta méthode, je dois créer une module de classe pour chaque type de contrôle, c'est ça?
Si vraiment il n'y a pas d'autre solution, je ferai ça. Mais j'aimerai bien pouvoir m'en sortir autrement. Je sais qu'avec VB.NET c'est faisable, mais je dois me le procurer et c'est pas pour tout de suite... :(

Y'a vraiment aucun autre moyen?
Commenter la réponse de Noxid
Noxid 78 Messages postés lundi 13 mai 2002Date d'inscription 4 mai 2008 Dernière intervention - 28 mai 2007 à 23:24
0
Merci
Désolé pour ma réponse tardive...
Ok ben je vais faire avec alors ! Merci pour ces réponses très précises !

Par contre, avec la création dynamique par Index, c'est faisable de gérer les événements? Je pense que oui mais bon...

Encore merci !
Commenter la réponse de Noxid
cs_pingouin84k 68 Messages postés vendredi 28 octobre 2005Date d'inscription 9 janvier 2011 Dernière intervention - 29 mai 2007 à 00:59
0
Merci
Ca se rapproche de ce que je cherche à faire. Tu fait comment pour les tableaux de contrôles?

Disons que j'ai un tableaux de boutons et pendant l'execution j'ai besoin d'en créer. J'ai essayé ça:

Dim WithEvents newControl() As VB.CommandButton

pour créer un tableau dynamique mais ca créer une erreur.
Commenter la réponse de cs_pingouin84k

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.