Créer des contrôles dynamiquement qui se comporte comme normaux

Résolu
supermotaboy Messages postés 65 Date d'inscription mercredi 26 février 2003 Statut Membre Dernière intervention 14 décembre 2005 - 5 déc. 2005 à 20:36
supermotaboy Messages postés 65 Date d'inscription mercredi 26 février 2003 Statut Membre Dernière intervention 14 décembre 2005 - 6 déc. 2005 à 18:32
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

Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
5 déc. 2005 à 21:30
- 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
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
5 déc. 2005 à 22:17
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
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
5 déc. 2005 à 22:26
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
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
5 déc. 2005 à 20:50
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
supermotaboy Messages postés 65 Date d'inscription mercredi 26 février 2003 Statut Membre Dernière intervention 14 décembre 2005
5 déc. 2005 à 21:10
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
0
supermotaboy Messages postés 65 Date d'inscription mercredi 26 février 2003 Statut Membre Dernière intervention 14 décembre 2005
5 déc. 2005 à 22:03
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
0
supermotaboy Messages postés 65 Date d'inscription mercredi 26 février 2003 Statut Membre Dernière intervention 14 décembre 2005
6 déc. 2005 à 18:21
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
0
supermotaboy Messages postés 65 Date d'inscription mercredi 26 février 2003 Statut Membre Dernière intervention 14 décembre 2005
6 déc. 2005 à 18:32
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
0
Rejoignez-nous