Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
709 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Ajouter dynamiquement un control dans un form

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Ajouter dynamiquement un control dans un form

n°461711
latruffe
Bdovore
Posté le 18-07-2003 à 15:56:33  profilanswer
 

Salut à tous,
 
je voudrais pouvoir créer de controls dynamiquement dans un form mais je ne connais pas à l'avance le nombre de controls à creer.
 
Il s'agit de text box. Quelle est la procédure pour créer des control depuis le code vba ?
 
J'ai d'abord penser à qq chose comme

Code :
  1. dim NewControl as control
  2. Set new control as .....
  3. forms("abcd" ).controls.add new control


 
mais visiblement ça ne fonctionne pas.
 
Si qq'un a une suggestion., elle est la bienvenue.


---------------
« Lorsque le bûcheron pénétra dans la forêt avec sa hache, les arbres se dirent : ne nous inquiétons pas, le manche est des nôtres. » | Gérez votre collection de BD en ligne !
mood
Publicité
Posté le 18-07-2003 à 15:56:33  profilanswer
 

n°461733
latruffe
Bdovore
Posté le 18-07-2003 à 16:10:56  profilanswer
 

Bah, plus la peine de chercher, j'ai trouvé.
 
Pour ceux que ça interesse, voila un exemple de code :
 
CreateControl, CreateReportControl Methods Example
 
The following example first creates a new form based on an Orders table. It then uses the CreateControl method to create a text box control and an attached label control on the form.
 

Code :
  1. Sub NewControls()
  2.     Dim frm As Form
  3.     Dim ctlLabel As Control, ctlText As Control
  4.     Dim intDataX As Integer, intDataY As Integer
  5.     Dim intLabelX As Integer, intLabelY As Integer
  6.     ' Create new form with Orders table as its record source.
  7.     Set frm = CreateForm
  8.     frm.RecordSource = "Orders"
  9.     ' Set positioning values for new controls.
  10.     intLabelX = 100
  11.     intLabelY = 100
  12.     intDataX = 1000
  13.     intDataY = 100
  14.     ' Create unbound default-size text box in detail section.
  15.     Set ctlText = CreateControl(frm.Name, acTextBox, , "", "", _
  16.         intDataX, intDataY)
  17.     ' Create child label control for text box.
  18.     Set ctlLabel = CreateControl(frm.Name, acLabel, , _
  19.          ctlText.Name, "NewLabel", intLabelX, intLabelY)
  20.     ' Restore form.
  21.     DoCmd.Restore
  22. End Sub


---------------
« Lorsque le bûcheron pénétra dans la forêt avec sa hache, les arbres se dirent : ne nous inquiétons pas, le manche est des nôtres. » | Gérez votre collection de BD en ligne !
n°462394
Gnub
Posté le 19-07-2003 à 12:41:40  profilanswer
 

tu peux faire plus simple en donnant à un contrôle un index (0 par exemple)  au moment de la création ;
 
Puis dans ton code, tu met  
 
 

Code :
  1. load TonControle(1)
  2. TonControle.visible = true


 
Tu obtient comme ça un contrôle similaire à ton premier :)

n°462401
drasche
Posté le 19-07-2003 à 12:52:21  profilanswer
 

latruffe a écrit :

Code :
  1. dim NewControl as control
  2. Set new control as .....
  3. forms("abcd" ).controls.add new control




sisi ça fonctionne parfaitement bien, c'est juste que le code est mal foutu.
 
Exemple de création d'une combobox:
 

Code :
  1. Dim WithEvents ctlCombo as VB.ComboBox
  2. ...
  3. Set ctlCombo = Controls.Add("VB.ComboBox", "ctlCombo" )
  4. ctlCombo.Move 10, 10
  5. ctlCombo.Visisble = True


Ce que tu dois retenir:
Ce code ne marche que dans un conteneur de contrôles (Form, UserControl).
* la clause WithEvents permet de capter les évènements émis par ton contrôle, tout comme la form, etc...
* Le contrôle ne peut être créé que par la méthode Add de la collection Controls, qui est une propriété de l'objet conteneur, donc le code ne peut fonctionner que dans une Form ou un UserControl. Important: le premier paramètre à Add est toujours le type du contrôle précédé de la librairie à laquelle il appartient (donc VB.ComboBox) et le second paramètre est un identifiant unique dans la collection (tu ne peux utiliser 2x le même).
* le Move, tu en fais ce que tu veux, ton contrôle n'est pas positionné par défaut dans la fenêtre.
* de même, un contrôle est toujours invisible quand tu le crées, il convient donc de le rendre visible.
 
Pour le retirer lors de la destruction du conteneur:

Code :
  1. Set ctlCombo = Nothing
  2. Call Controls.Remove("ctlCombo" )


---------------
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)

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Ajouter dynamiquement un control dans un form

 

Sujets relatifs
Organiser ses compos delphi sur la form ?Passage de parametres a une form...
[JAVASCRIPT] Faire afficher d control et décalé le reste du formulaire[JavaScript] Remplir un champ de form à partir d'une autre fenêtre
[C++] ajouter un int à une string[JS ] Valider un FORM en JS
[HTML] form : envoyer vers une page php, ou vers une autre[Delphi] multitache : activer une form à la fin d'une tache
Probleme pour générer dynamiquement une expressionComment ajouter un caractère à un nom sous MS-DOS ?
Plus de sujets relatifs à : Ajouter dynamiquement un control dans un form


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR