Créer des contrôles dynamiquement qui se comporte comme normaux [Résolu]

Signaler
Messages postés
65
Date d'inscription
mercredi 26 février 2003
Statut
Membre
Dernière intervention
14 décembre 2005
-
supermotaboy
Messages postés
65
Date d'inscription
mercredi 26 février 2003
Statut
Membre
Dernière intervention
14 décembre 2005
-
Salut a tous,

Je sais qu'il existe deja plusieurs questions et sources a ce sujet, mais soit je ne les ai pas bien compris, soit pas trouvée :( Donc je voudrais pouvoir créer des controles de façon dynamique, mais sans la methode index (car necessite que un controle soit deja present) et si possible avec withevents, pour pouvoir gérer les evenements de ce controle. Ce serait pour un systeme de plug in, ou, pour effectuer diverse actions, l'utilisateur pourrait avoir besoin d'un controle (un treeview par exemple). Il me faudrait donc aussi le moyen de le créer autre part que dans le module ou le code est écrit.
J'espere avoir eté clair, et merci d'avance pour vos reponses
++

LTourist

8 réponses

Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
23
- le composant doit être coché pour avoir la bibliothéque

- dans projet.option faut décocher:

Remove information about unused ActiveX contyrols



- déclaration WithEvents uniquement sur la Forme

Public WithEvents obj1 As mscomctllib.ListView



Set obj1 = Controls.Add("mscomctllib.ListViewCtrl.2", "Liste")



- le Set peut être fait dans le module:

Public Sub Creation()

Set Form1.obj1 = Form1.Controls.Add("mscomctllib.ListViewCtrl.2", "Liste")

Form1.obj1.Visible = True

End Sub


Daniel
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 187 internautes nous ont dit merci ce mois-ci

Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
23
je l'ai obtenu par un message d'erreur qui apparait:

Run-Time error '739'

Cannot add control "mscomctllib.treeview" . . . .

the ProgID for this control is "MSComctlLib.TreeCtrl.2"



Public WithEvents obj1 As MSComctlLib.TreeView



Set obj1 = Controls.Add("mscomctllib.treectrl.2", "Arbre")


en fait sans le ".2" ça passe aussi


Daniel
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 187 internautes nous ont dit merci ce mois-ci

Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
25
Salut

pour la creation des controles dynaques tel que des User control
tu peux utiliser la méthodes des index

moi, je les manipules comme cela.

sur la form
le user(0) est invisible
et apres j'appele la methode
F1.ctl1(0).Top = 0
While Not rsADO.EOF
Load F1.ctl1(i)
F1.ctl1(i).Top = F1.ctl1(i - 1).Top + F1.ctl1(i - 1).Height
F1.ctl1(i).Style = "Supprimer"
F1.ctl1(i).nom = rsADO!champ1 * -1
F1.ctl1(i).property1 = rsADO![champ2] * -1
F1.ctl1(i).Visible = True
i = i + 1
rsADO.MoveNext
Wend

F1 est le nom de la form car tout la gestion des controles avait été dans ce projet
déporté dans des modules. car les une bonne partie des controles etait present sur une seule form (c'etait la demande) la mise en module et encore mieux en class permet de travailler a plusieurs sur une grosse forme ;-)

j'ai renommer les champs c'est pour cela que c'est moins parlant
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 187 internautes nous ont dit merci ce mois-ci

Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
23
création d'un bouton:









Dim WithEvents obj1 As CommandButton



Set obj1 = Controls.Add("VB.CommandButton", "button")



obj1.Visible = True

obj1.Top = 100

obj1.Left = 100

ect ...



Private Sub Obj1_Click()

Beep

End Sub


Daniel
Messages postés
65
Date d'inscription
mercredi 26 février 2003
Statut
Membre
Dernière intervention
14 décembre 2005

Merci de ta réponse. En effet j'avais vu cette solution, le probleme est qu'avec cette solution, je ne parviens pas créer des controles plus "complexes", enfin n etant pas inclus par default dans VB, tel que des ListView ou des TreeView... Comment faire? Et y'a t'il un moyen pour créer cette objet sur la Form1 par exemple alors que le code se situe dans le Module MonModule (encore par exmple :) )?

LTourist
Messages postés
65
Date d'inscription
mercredi 26 février 2003
Statut
Membre
Dernière intervention
14 décembre 2005

Merci beaucoup, ce qu'il me manquait en fait c'était le "Ctrl.2" a la fin de la chaine referençant quel objet créer. D'ailleurs si tu pouvait me dire comment tu l'as obtenu je suis preneur, parce que j'ai beau cherché, je ne la trouve dans aucun menu, ni dans l'explorateur d'objet. Merci beaucoup!

LTourist
Messages postés
65
Date d'inscription
mercredi 26 février 2003
Statut
Membre
Dernière intervention
14 décembre 2005

Merci de vos reponses. Pour ta solution nhervagault, justement je souhaiterais eviter de l'utilisé, car celui m'oblige a créer un controle sur ma form a la base, et comme il s'agit d'un systeme de plugin, ça m'embete un peu car ça voudrais dire que je devrais prevoir tout les cas possible sur ma form, et ça prendrai de la place pour rien. Mais merci quand meme de l'astuce, c'est toujours bon a prendre, surtout si l'on doit créer un nombre important de meme controle avec les memes options ;)
Merci a vous deux :)
LTourist
Messages postés
65
Date d'inscription
mercredi 26 février 2003
Statut
Membre
Dernière intervention
14 décembre 2005

J'accepte quand meme ta reponse pour aider les gens a trouver une solution qui leurs conviennent, apres tout ces demandes sur le forum ne servent pas qu'a celui qui pose la question ;)
++

LTourist