Le pb n'est pas trés clair, j'avais laissé une petite doc la dessus si ça peut t'être utile...
------------ 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"
|