création dynamique de contrôle

création dynamique de contrôle - VB/VBA/VBS - Programmation

Marsh Posté le 09-05-2003 à 13:55:09    

j'ai crée des controles dynamiques avec load controle. Problème, je n'arrive pas à accéder au valeur des propriétés de ce contrôle.  
Exemple, je crée dynamiquement un textbox avec le nom textbox1, je fais Me.textbox1.Text, et j'obtient une erreur à l'execution. J'ai pallié ce problème en parcourant tous les contrôles du formulaire et en testant chaque fois, le name de de contrôle, j'arrive effectivment à récupérer la valeur voulue, mais cela m'oblige à parcourir tous les controles.  
 
Merci de vos lumières ...

Reply

Marsh Posté le 09-05-2003 à 13:55:09   

Reply

Marsh Posté le 09-05-2003 à 14:00:23    

toi tu es un petit veinard ;)  J'en ai fait ces deux derniers jours...  Tout dépend de ce à quoi tu veux arriver exactement, et quelle base tu as au départ sur ton écran.
 
Si tu parles de contrôles en array, et qu'un contrôle initial existe sur l'écran, il faut qu'il porte l'index zéro, et tu devras faire un truc du style  
 
Load TextBox1(1)
 
et référencer ton nouveau contrôle par  
 
TextBox1(1).Text = "bonjour"
 
Je crois que ton problème est là: tu dois spécifier un index.


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 09-05-2003 à 14:07:08    

Sinon, créer dynamiquement un contrôle tout seul dans un coin de l'écran exige une référence.  Dans ce cas, oublie le Load:
 

Code :
  1. Set objComCtl = Controls.Add("MSComctlLib.ListViewCtrl.2", "objComCtl" )


 
Cette ligne crée un ListView dont la référence est assignée à objComCtl.  Il faudra bien sûr l'initialiser, sachant que par exemple, le contrôle est invisible au départ.
 
C'est fort utile pour récupérer les events d'avoir une variable permanente, qui doit être déclarée:
 

Code :
  1. Private WithEvents objComCtl as ListView


 
L'identifiant Controls est une collection associée à toute Form.  Le premier paramètre est le type de contrôle, et le second est une clé pour l'identifier dans la collection.  Si tu ne veux pas avoir de référence via une variable, tu pourras toujours le retrouver avec:
 

Code :
  1. Controls("objComCtl" )


 
qui renverra la référence vers le contrôle.


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 09-05-2003 à 14:45:03    

merci bien drasche, ça marche, j'utilise la deuxième méthode.
 
Mais un petit détail m'échappe. Quand je fais ça :
MsgBox Controls("menu1" ), j'obtiens bien le text du control menu1
 
Le problème, c'est que j'ai crée menu1, menu2, menu3 ... et je voudrais accèder successivement à leur valeur dans une boucle.  
De type :
 
For i = 1 To nbmenu
  texte = "Me.menu" & i
  MsgBox Controls(texte)
Next
 
Mais j'obtiens alors une erreur 730 , erreur d'exécution 'Me.menu1' introuvable ??? Je comprends pas.
 
si tu peux m'aider ...

Reply

Marsh Posté le 10-05-2003 à 00:28:09    

vire le "me.", à première vue c'est ça qui salope tout ;)


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 21-02-2008 à 06:21:00    

J ai le mm probleme,  
 
Excel ne trouve pas l object...
 
comment faire?
 
PS j ai essayer d enlevr me et ca marche tjrs pas

Reply

Marsh Posté le 25-11-2014 à 15:46:50    

Comment faire pour les procédures de type ItemCheck?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed