Création dynamique d'objets sous VB6

aanabil Messages postés 6 Date d'inscription jeudi 25 juillet 2002 Statut Membre Dernière intervention 25 février 2010 - 26 févr. 2003 à 08:38
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 25 févr. 2010 à 14:53
Bonjour à tous !

J'aimerais savoir si qqun sait comment faire pour créer en dynamique des objets sous VB6 : des boutons, des champs textes, des labels, etc.

Je vous remercie, d'avance, de votre aide.

Merci et à bientôt.

11 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
26 févr. 2003 à 10:25
Salut aanabil

Oui, c'est possible.
Il suffit pour celà de prévoir, à la création, les contrôles que tu veux créer dynamiquement.
Par exemple, tu veux ajouter un Label :
- En mode création, crée un Label original auquel tu mets les propriétés suivantes :
Index = 0 ' Indexation (obligatoire)
Visible = False ' pour ne pas voir cet original
- Ensuite, en RunTime, pour ajouter un Label, tu fais :
Load Label(1) ' où 1 est l'index du contrôle
Label(1).Visible = True ' Autorise affichage
Label(1).Top = ... ' redéfini sa position
Label(1).Left = ...
Label(1).Width = ...
Label(1).Height = ...

Pour en créer un second, il te suffit de faire pareil, mais avec l'index suivant : Load Label(2) ...

Pour les autres controles, c'est exactement la même chose.
Vala
Jack
0
lpikachu58 Messages postés 351 Date d'inscription samedi 2 février 2002 Statut Membre Dernière intervention 6 mai 2004 2
26 févr. 2003 à 11:02
Attention quand même avec l'indexation des objet vb gére très mal les piles d'objet alors je sois pas étonné qu'il te fasse des trucs un peu débilles.

Bon chance
@+

Cédric Lemaitre

Viva le révolution Linux!!!!!!!!!!!!!!!
0
alonsyl Messages postés 348 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 6 novembre 2008 12
4 avril 2005 à 14:00
bonjour,

j'ai justement un pbl d'indexaton !
j'ai alloue des controles dynnamiquement a l'ouverture de ma form2 en fonction d'element que m'avait specifie l'utilisateur en form1.

comment faire s'il change d'avis et desire supprimer 1 controle ?
moi j'aurais aime unloader uniquement le controle specifie et reindexer (increment de -1) ceux qui suivent mais je n'y arrive pas. je n'ai reussi qu'a tout unloader pour tout reunloader a l'exeption du controle concerne mais je trouve ca bcp trop lourd !
commment feriez vous a ma place ?

merci a vous,

alonsyl
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
4 avril 2005 à 17:49
Salut
Coup de bol que j'aie activé le mail sur ce post, sinon, depuis 2003 ...

Oui, tu peux faire des Unload monObjet(monIndex)
Non, on ne peut pas réindexer les objets
Par contre, tu peux facilement tester si l'objet existe :
If monObjet(monIndex) Is Nothing Then
' rien à cet index : je peux refaire un Load
End If
Suffit d'intégrer ce test lorsque tu veux créer un nouvel objet afin de boucher les trous.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
0

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

Posez votre question
alonsyl Messages postés 348 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 6 novembre 2008 12
4 avril 2005 à 18:44
SUPER !!! merci jacquot ...

alonsyl
0
boudas Messages postés 13 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 8 octobre 2008
8 août 2005 à 16:01
bonjour

j'ai exactement le même soucis que celui demandé dans ce post mais je n'arrive pas trouver pour mettre l'index à 0
peut etre est ce du au fait que j'utilise VB6 sous Excel ?
Et si oui, connaissez vous un moyen de créer un controle de facon dynamique via le VB 6 d'Excel ?

merci d'avance pour votre réponse
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
8 août 2005 à 18:13
ReSalut
... Pas d'indexation possible sous VBA = Excel, uniquement VB6, désolé.

Pour décharger un controle, il suffit de faire Unload monControle(monIndex)
Ensuite, quand tu auras besoin de recharger un nouveau controle, il te suffit de faire ce genre de petite boucle pour tester s'il y a un trou dans ta collection :

Trouvé = 0
For r = 1 To UBound(monControle)
If monControle(r) Is Nothing Then
' Index libre trouvé !
Trouvé = r
Exit For
Next r
If Trouvé = 0 Then
' Pas trouvé : ajoute à la suite
Load monControle(UBound(monControle) + 1)
Else
' Trou trouvé
Load monControle(Trouvé)
End If ' ...

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
(je
0
aanabil Messages postés 6 Date d'inscription jeudi 25 juillet 2002 Statut Membre Dernière intervention 25 février 2010
25 févr. 2010 à 08:29
Merci à tous !

Aanabil
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
25 févr. 2010 à 13:05
ptdr : je ne sais pas dans quelle galaxie lointaine tu habites, mais sacré décalage horaire : 7 ans !!

Merci de tes remerciements
0
aanabil Messages postés 6 Date d'inscription jeudi 25 juillet 2002 Statut Membre Dernière intervention 25 février 2010
25 févr. 2010 à 14:06
7 ans !!!!!!!!!!!!!
Désolé. A bientôt.
Merci encore. C'est quand même bizarre, je n'ai aucun souvenir d'avoir poster ce post en 2003 !!!
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
25 févr. 2010 à 14:53
C'est le décalage horaire du voyage, surement !
lol
Pas de souci.
Bonne prog
0
Rejoignez-nous