Comment creer dynamiquement un objet - VB/VBA/VBS - Programmation
Marsh Posté le 06-08-2002 à 15:53:51
Kyle_Katarn a écrit a écrit : Utilise plutot load et unload. |
ce n'est pas un problème d'emplacement et d'évement, c'est un problème dans le code,
ERREUR D'EXECUTION 91 VARIABLE OBJET OU VRAIABLE BLOC WITH NON DEFINI
je viens de le tester, maintenant il faut trouver l'erreur !
Marsh Posté le 06-08-2002 à 17:13:42
macray a écrit a écrit : ERREUR D'EXECUTION 91 VARIABLE OBJET OU VRAIABLE BLOC WITH NON DEFINI je viens de le tester, maintenant il faut trouver l'erreur ! |
le probleme est surtout qu'il manque quelque chose, mais quoi ...
Marsh Posté le 06-08-2002 à 17:14:52
euh , jvais peut etre me gourrer, mais l'erreur n'est elle pas évidente ?!?
y a pas d'allocation d'objet dans le code présenté dans le topic
il manque pas un "Set" non ?!?
Marsh Posté le 06-08-2002 à 17:33:19
bon toujours sans chercher en fesant un exemple mais en creusant dans ma ptite caboche : je dirais qu'il faut l'ajouter à la collection de controle de la form en cours ?
(pasque bon fo bien dire à un moment ou à un autre que le label que l'on créé est enfant de la form en cours)
de plus l'ajout dans la collection renvoi un objet de type controle mais instancié lui (d'où le "pas besoin du set" )
euh yabon ?
Marsh Posté le 07-08-2002 à 09:43:52
ioio a écrit a écrit : je souhaiterai pouvoir créer un Label (par exemple) directement a partir du code, sans passer par l'étape de dessin sur le formulaire. J'emploi ce code, mais j'ai obtien une erreur de variable non définie
|
tu dois créer une groupe de label genre tableau de label ensuite tu fais ca :
Code :
|
sachant que lb(0) doit se trouver sur ta feuille...
si tu ne ve le veux pas
tu le mets en invisible...
voila
Marsh Posté le 08-10-2003 à 13:45:38
Styx0 a écrit : bon toujours sans chercher en fesant un exemple mais en creusant dans ma ptite caboche : je dirais qu'il faut l'ajouter à la collection de controle de la form en cours ? |
j'ai axactement le meme probleme..
tu as trouvé?
Marsh Posté le 08-10-2003 à 14:13:57
bon
1) au moment du Form_Initialize et du Form_Terminate, l'interface visuelle n'existe pas. Donc pas la peine d'essayer de créer un contrôle à ce moment là. Enfin ça marchera peut-être mais parce que le Form_Load aura été forcé. Faites donc ces opérations dans les Load et Unload, ils sont prévus pour ça.
2) Set moncontrole = Controls.Add("nom_du_controle", "type_de_controle" )
3) moncontrole.Move(mes coordonnées)
4) moncontrole.Visible = True
Je crois que c'est tout.
Au moment du Unload:
1) Set moncontrole = Nothing
2) Controls.Remove("nom_du_controle" )
Edit: en fait il n'est pas utile de garder la référence à moncontrole pendant toute la vie de la form, elle est surtout nécessaire pour l'initialisation. Après vous en faites ce que vous voulez. Par contre, le Controls.Remove est indispensable au moment de l'Unload histoire de garder une gestion propre des ressources.
Marsh Posté le 08-10-2003 à 14:25:25
drasche a écrit : bon |
faut pas déclarer moncontrole?
quelle est la difference entre moncontrole et "nom_du_controle"
Marsh Posté le 08-10-2003 à 14:48:43
moncontrole doit bien entendu être déclaré As Control (j'aurais dû le préciser, tu as raison).
"nom_du_controle" est un identifiant unique pour le contrôle dans la collection des contrôles, et que tu dois à nouveau utiliser pour le détruire. Quand au type_de_controle, il vaut mieux mettre le projet en préfixe, par exemple: VB.TextBox. Si le contrôle fait partie de ton projet (donc un usercontrol créé par toi, alors ce sera le nom de ton projet.
Marsh Posté le 08-10-2003 à 15:07:13
je capte que dalle.. ça marche pas.. y a surrement un probleme dans l'ordre des arguments..
par contre j'ai essayé ça :
Code :
|
Code :
|
et ça rulz..
edit: par contre ce putain de TabString il veut pas me le prendre.. faut surrement l'integrer au projet.. comment faire?
Marsh Posté le 08-10-2003 à 15:09:05
drasche a écrit : t'as inversé le nom du contrôle et le type |
oui..
j'ai édité, mais apres que tu ais posté!
edit: merci au fait
Marsh Posté le 08-10-2003 à 15:17:16
meme si j'ajoute un TabStrip à la main sur la Form ça marche pas..
bordail
par contre ça :
Code :
|
ça passe
Marsh Posté le 08-10-2003 à 15:58:43
hop j'ai touvé!
Set ControleDynamique = Me.Controls.Add("Comctl.tabstrip.1", "tabStripName" ) |
faut que je passe par Comctl.tabstrip.1
donc bon.. ça marche.. mais pas trop.. maintenant il me demande une chaine de licence pour mon composant..
heu......... drasche!!
edit : Licenses.Add "Comctl.tabstrip.1", "heu.." (ça marche pas..)
Marsh Posté le 08-10-2003 à 16:07:32
Pour la license c'est parce que c'est un truc qui s'installe avec VB normalement. T'as quelle version? Si c'est l'étudiant , le contrôle n'est sûrement pas fourni avec
En gros la license t'empêche d'utiliser le contrôle au design time mais je vois pas pourquoi tu pourrais pas au runtime, sans doute parce que tu es en mode debug. Essaie de compiler ton truc puis de lancer l'exe pour voir ce qu'il te dit.
Marsh Posté le 08-10-2003 à 16:18:25
j'ai generé le .exe mais il veut pas!!
pourtant dans la msdn y a ecrit que si on a le composant dans la boitie à outils, il ne devrait pas demander de licence key..
je l'utilise en le posant sur la form.. alors pourquoi je pourrai pas le créer dynamiquement..
Marsh Posté le 08-10-2003 à 16:25:24
alors là je peux t'assurer que la MSDN se trompe
tu peux très bien l'avoir dans ta toolbox et avoir le message d'insultes causant de la license, j'en ai fait l'expérience quand j'ai débuté en VB
En fait si tu peux le poser sur la form, je vois pas l'intérêt (pour un TabStrip) de l'allouer dynamiquement
Marsh Posté le 08-10-2003 à 16:30:14
drasche a écrit : alors là je peux t'assurer que la MSDN se trompe |
ah?
drasche a écrit : |
pour le sport..
et surtout pour faire plus propre.. bref.. je vais la poser sur la form.. c'est clair que ça va pas changer grand chose..
enfin bref.. ça m'a bien aidé à comprendre VB mirci
Marsh Posté le 08-10-2003 à 16:37:28
euh pour faire plus propre, rien de mieux que la poser sur la form hein Les contrôles dynamiques, c'est plutôt quand tu sais pas à l'avance combien tu en auras (et une interface avec un tableau de TapStrips, ça doit être particulièrement dégueu )
Marsh Posté le 08-10-2003 à 16:39:55
hum.. rien de mieux qu'un tableau de tabstrip.. si ce n'est un tabstrip de tabstrips!
bref.. moi je vais me mettre au .NET, harko m'a motivé!
Marsh Posté le 06-08-2002 à 11:00:30
je souhaiterai pouvoir créer un Label (par exemple) directement a partir du code, sans passer par l'étape de dessin sur le formulaire. J'emploi ce code, mais j'ai obtien une erreur de variable non définie
que ce soit dans form_initialize(), ou form_load(), j'ai toujour le meme probleme...
Message édité par ioio le 06-08-2002 à 11:02:21