Ajouter un control dynamiquement (at runtime)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 12 293 fois - Téléchargée 46 fois

Contenu du snippet

Ajouter un control dynamiquement (at runtime)
le control doit être déclaré si il n'est pas déja utilisé dans le projet.
Si il est ajouté aux composants mais non utilisé, il ne faut pas choisir l'option "Remove info about unused ActiveX" dans les propriétés du projet.

Pour Commencer il faut référencer le control:
Dim WithEvents ctlDynamic As VBControlExtender
Dim WithEvents ctlDynaWeb As VBControlExtender
Dim WithEvents ctlCommand As VB.CommandButton

Pour declarer un Control:
Licenses.Add "MSComctlLib.TreeCtrl" // pour un treeview

Pour l'ajouter ensuite:
Set NomControl = Controls.Add("ProgId","Name", container)
Set ctlDynamic = Controls.Add("MSComctlLib.TreeCtrl","myctl", Form1) //le treeview
Set ctlDynaWeb = Controls.Add("Shell.explorer.2", "myctlweb", Form1) //WebBrowser
Set ctlCommand = Controls.Add("VB.CommandButton", "ctlCommand1", Form1) //un Button

Le deuxiéme exemple montre qu'il n'est pas toujours facil de deviner le ProgId d'un control. Pour les OCX c'est souvent le nom du fichier OCX + "Lib." + le nom du Control (expl "MSComctl.ocx"). Une autre solution consiste à ajouter le control dans une form "at design time", d'editer le form.frm dans un editeur de text et de trouver la ligne:

Begin SHDocVwCtl.WebBrowser WebBrowser1 //pour SHDocVw.dll

Si on utilise "SHDocVwCtl.WebBrowser" comme progid pour le WebBrowser, Visual Basic donne le bon ProgId en message d'erreur... (La demarche est un peu tordue)

Certain control ne demande pas de déclaration (Commandbutton, TextBox...)

Pour acceder aux propriétés du control:
ctlDynamic.Visible = True //Le control créé est invisible par defaut

Supprimer un Control Ajouté dynamiquement
Form1.Controls.Remove "myctl"

Conclusion :


J'espére que cela sera util à quelqu'un...

A voir également

Ajouter un commentaire

Commentaires

cs_Stephane
Messages postés
551
Date d'inscription
vendredi 5 janvier 2001
Statut
Membre
Dernière intervention
23 septembre 2006
-
a ouuuuuui merci je ne sais pas si ca marche j'ai pa encore essay (je vais tout de suite) mais c'est super tout ce que je voulais
merciiiiiiiiiii
dreadlock
Messages postés
11
Date d'inscription
lundi 7 janvier 2002
Statut
Membre
Dernière intervention
19 mai 2010
-
aaaaaaaaaaaaah c trop beau, j'vous jure des fois je m'en pisserai dessus de joie
borntoclimb
Messages postés
98
Date d'inscription
vendredi 4 janvier 2002
Statut
Membre
Dernière intervention
7 mars 2006
5 -
Bien heureux que ça vous plaise jusqu'à l'incontinence ;)

borntoclimb
Ludolpif
Messages postés
139
Date d'inscription
samedi 11 mai 2002
Statut
Membre
Dernière intervention
17 mai 2007
-
Moi aussi, je V tester, je te remercie !
trifonnerie
Messages postés
6
Date d'inscription
lundi 30 juin 2003
Statut
Membre
Dernière intervention
14 novembre 2003
-
C'est bien joli tout ca,mais comment faire pour un control indéxé
exemple un Label1(0), Label1(1) et que l'on veut qu'il réagisse au clic de la souris

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.