begin process at 2012 02 12 11:23:56
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Control

 > AJOUTER UN CONTROL DYNAMIQUEMENT (AT RUNTIME)

AJOUTER UN CONTROL DYNAMIQUEMENT (AT RUNTIME)


 Information sur la source

Note :
9,33 / 10 - par 6 personnes
9,33 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Control Classé sous :ajouter, contrôle, dynamique, créer, élément Niveau :Initié Date de création :04/01/2002 Date de mise à jour :04/01/2002 22:27:03 Vu :10 572

Auteur : borntoclimb

Ecrire un message privé
Commentaire sur cette source (20)
Ajouter un commentaire et/ou une note

 Description

Ajouter un control dynamiquement (at runtime)
le control doit être déclaré si il n'est pas déja utilisé dans le projet.
Si il est ajouté aux composants mais non utilisé, il ne faut pas choisir l'option "Remove info about unused ActiveX" dans les propriétés du projet.

Pour Commencer il faut référencer le control:
Dim WithEvents ctlDynamic As VBControlExtender
Dim WithEvents ctlDynaWeb As VBControlExtender
Dim WithEvents ctlCommand As VB.CommandButton

Pour declarer un Control:
Licenses.Add "MSComctlLib.TreeCtrl"  // pour un treeview

Pour l'ajouter ensuite:
Set NomControl = Controls.Add("ProgId","Name", container)
Set ctlDynamic = Controls.Add("MSComctlLib.TreeCtrl","myctl", Form1) //le treeview
Set ctlDynaWeb = Controls.Add("Shell.explorer.2", "myctlweb", Form1)    //WebBrowser
Set ctlCommand = Controls.Add("VB.CommandButton", "ctlCommand1", Form1) //un Button

Le deuxiéme exemple montre qu'il n'est pas toujours facil de deviner le ProgId d'un control. Pour les OCX c'est souvent le nom du fichier OCX + "Lib." + le nom du Control (expl "MSComctl.ocx"). Une autre solution consiste à ajouter le control dans une form "at design time", d'editer le form.frm dans un editeur de text et de trouver la ligne:

Begin SHDocVwCtl.WebBrowser WebBrowser1 //pour SHDocVw.dll

Si on utilise "SHDocVwCtl.WebBrowser" comme progid pour le WebBrowser, Visual Basic donne le bon ProgId en message d'erreur... (La demarche est un peu tordue)

Certain control ne demande pas de déclaration (Commandbutton, TextBox...)


Pour acceder aux propriétés du control:
ctlDynamic.Visible = True //Le control créé est invisible par defaut


Supprimer un Control Ajouté dynamiquement
Form1.Controls.Remove "myctl"


 Conclusion

J'espére que cela sera util à quelqu'un...


 Sources du même auteur

Source avec Zip Source avec une capture MISE Á JOUR ANTIVIRUS GRATUITE (PC-CILLIN)
Source avec Zip Source avec une capture DVD PLAYER (SPECIAL TV)
Source avec Zip Source avec une capture LOUPE, UNE APPLICATION (TRÉS) PRATIQUE.
Source avec Zip UTILISER UNE SCROLLBAR SUR UNE FRAME (DEBUTANT)
Source avec Zip Source avec une capture CORRECTEUR D'ORTHOGRAPHE (SPELLCHECK) ...

 Sources de la même categorie

Source avec Zip COMMUNICATION MODBUS MASTER par sergelapointe
Source avec Zip Source avec une capture DÉPLACEMENT AVEC FLÈCHES DANS UN PAVÉ DE TEXTBOX 9X9 DYNAMIQ... par EhJoe
Source avec Zip Source avec une capture Source .NET (Dotnet) CONTROLSTARS EN RÉPONSE À JAKNIGHT007 par bigboss9
Source avec Zip Source avec une capture Source .NET (Dotnet) CALENDRIER ANNUEL NORME ISO par Prog1001
Source avec Zip Source avec une capture Source .NET (Dotnet) CONTROLE STARS par jaknight007

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture DÉPLACEMENT AVEC FLÈCHES DANS UN PAVÉ DE TEXTBOX 9X9 DYNAMIQ... par EhJoe
Source avec Zip Source .NET (Dotnet) DESSINER DYNAMIQUEMENT SUR UNE PICTUREBOX LIKE PAINTE par xave4552
Source avec Zip Source avec une capture Source .NET (Dotnet) AJOUTER - MODIFIER - SUPPRIMER DANS UNE BDD ACCESS SOUS VB20... par kewan
Source avec Zip Source avec une capture DYNAMIC CONTROLS MANAGER - GÉREZ FACILEMENT VOS CONTRÔLES DY... par PCPT
Source avec Zip CLONER OBJETS par xvr232

Commentaires et avis

Commentaire de Stephane le 05/01/2002 22:17:29

a ouuuuuui merci je ne sais pas si ca marche j'ai pa encore essay (je vais tout de suite) mais c'est super tout ce que je voulais
merciiiiiiiiiii

Commentaire de dreadlock le 28/02/2002 15:04:49

aaaaaaaaaaaaah c trop beau, j'vous jure des fois je m'en pisserai dessus de joie

Commentaire de borntoclimb le 01/04/2002 14:42:58

Bien heureux que ça vous plaise jusqu'à l'incontinence ;)

borntoclimb

Commentaire de Ludolpif le 26/01/2003 11:47:01

Moi aussi, je V tester, je te remercie !

Commentaire de trifonnerie le 10/11/2003 13:06:10

C'est bien joli tout ca,mais comment faire pour un control indéxé
exemple un Label1(0), Label1(1) et que l'on veut qu'il réagisse au clic de la souris

Commentaire de borntoclimb le 10/11/2003 14:16:44

Il faut ajouter le premier manuellement sur la form et ajouter les suivants dynamiquement. en gros, il faut que ton tableau de control lié a un evenement soit initialisé, c'est la seule methode possible (que je conaisse).
Il y a d'autre source que la mienne sur le sujet, tu peux y jeter un coup d'oeil.

Commentaire de shadowmoy le 30/01/2004 19:57:51

dommage que ca ne ca ne gere pas les tableaux indexé...

Commentaire de shadowmoy le 30/01/2004 20:26:36

dommage que ca ne ca ne gere pas les tableaux indexé...

Commentaire de yannickt le 03/03/2005 20:06:34

comment on fait pour exécuter les méthodes et lire/écrire les propriétés? (Comme par exemple... backcolor d'un control, autrement dit, comment faire pour aller plus loin que les événements que nous propose VbControlExtender?)

Commentaire de yannickt le 03/03/2005 20:07:30

comment on fait pour exécuter les méthodes et lire/écrire les propriétés? (Comme par exemple... backcolor d'un control, autrement dit, comment faire pour aller plus loin que les événements que nous propose VbControlExtender?) Si vous réussissez à trouver ça, franchement, vous êtes puissant, lol!
Merci, Yannick...

Commentaire de borntoclimb le 04/03/2005 09:33:22

Je ne comprend pas bien ta question... Pour changer les propriétés et lancer les methodes tu fais:

ctlDynamic.property = value
call ctlDynamic .method()

Ca aide?

Borntoclimb

Commentaire de yannickt le 04/03/2005 19:39:14

Hummm, j'suis pas certain, mais je vous donne le bénéfice du doute, je vais l'essayer, je vous reviens là-dessus, merci de votre réponse, Yannick...

Commentaire de MadM@tt le 11/02/2006 15:15:16

Wahouuuuu !!!!!
ahhh c'est trop trop bien je cherche ça depuis ce matin... WOUHOU !!!

Petite précision pour ceux qui auront quelques problemes comme moi :
Public WithEvents ctlobjOcx As VBControlExtender
est à mettre dans la form ou doit apparaitre le controle
et il faut faire : nomForm.Controls.Add si vous placez ça ailleurs que dans la form

Merci infiniment !!

Commentaire de MadM@tt le 20/02/2006 17:41:32

YannickT > J'ai la meme question que toi, mais pour les propriétés.
J'ai importé mes ocx persos comme expliqué dans la source, mais impossible d'acceder aux propriétés propres à mon controle, je n'ai que les propriétés par défaut de vb : ça me met une erreur à l'execution alors que je sais que mon controle supporte la propriété.
Vous voyez la solution ?

Commentaire de yannickt le 20/02/2006 20:51:52

Trouver une solution à ce problème nous donnerait une possibilité infinie d'expension de notre programme, si quequ'un trouve comment, je serai dans l'impossibilité de ne pas lui adresser ma vive gratitude!

Commentaire de MadM@tt le 21/02/2006 00:22:31

Wouhou !
J'ai trouvé ! En tout cas ça marche chez moi. En pleine execution j'ai lancé la fenetre qui t'affiche toutes les variables de la form, et j'ai explorer toutes les propriétés de mon controle, et j'ai vu que toutes les propriétés persos étaient dans la propriété object. Donc il faut faire :
ObjOCX.Object.Propriete

pour info si ça vous interesse j'ai fait un tutoriel sur tout le late binding, parce que les infos sont trop éparpillées sur le net à mon gout :p
http://www.vbfrance.com/tutoriaux/AJOUTER-CONTROLE-OCX-DYNAMIQUEMENT-PLEINE-EXECUTION-LATE-BINDING_361.aspx

voilà !

Commentaire de yannickt le 21/02/2006 04:15:20

OMG! Les mots me manquent pour exprimer ma joie! tellement de possibilités!!!! MERCI INFINIEMENT MADM@TT!!!! Depuis le temps que je cherchais la solution! T'es un héros! loll! Excusez cet excès... Yannick

Commentaire de MadM@tt le 21/02/2006 13:02:33

lol ^^ content si je peux aider

Commentaire de magicgus le 04/09/2008 21:58:35

Bonjour, j'ai une petite question :

Je suis en train de créer un contrôle de liste et pour ce faire je créer dynamiquement des label, jusqu'a maintenant j'incremente le nom serveur du control mais cela ne colle pas aver l'application que je veut en faire car il me sera difficile de créer une procedure évenementiel de clique pour chaque label en mode d'execution.

Je peut surement palier à ce problème en créer des label avec non unique et indexation, ex: au lieu de Label1, Label2 j'obtient Label(1), Label(2), etc...

Je ne trouve pas la commande pour créer un index à un contrôle créé dynamiquement et je ne peut lui assigné d'index une fois crée.

Quelq'un aurait une solution ?

Merci d'avance.

Commentaire de magicgus le 05/09/2008 00:24:24

J'ai trouvé une solution provisoir, ou pas...

Je repere le label cliqué en faisan un calcul de sa position par rapport à la souris, en attendant mieux ça marche très bien !

Mais je reste ouverts a vos suggestions, Merci

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Ajouter un élément au menu [ par casafa ] Voila, j'ai créer un menu vb avec "menu editor", j'ai créer un menu "police" et qui à comme nom: "pol"Si je clique dessus j'obtiens ça: Private Sub po Contrôle dynamique [ par pierre63 ] Bonjour,dans moon programme je créer des contrôle dynamique suivant un certain evenement de la souris donc je leur donne un nom et et dans ce progr j' Groupe de contrôle dynamique [ par tparisi ] Salut à tous,J'ai besoin de créer des groupes de controles de façon dynamique (à l'éxécution)... A la création no p Comment créer un tableau dynamique ? [ par beegeezzz ] Bonjour tout le monde,Je voudrais savoir comment créer un tableau dynamique en VB 6.Lorsque l'utilisateur clique sur un bouton, il faudrait ajouter un Feuilles dynamique (sauvegarde) [ par frezz13 ] Bonjour,Dans un projet MDI je désire créer des feuilles dynamiquement comprenant un Msflexgrid (comme excel) et pouvoir les ouvrir, modifié le contenu Créer des contrôle pendant l'éxecution avec VB [ par makram2006 ] Je veux savoir comment peut on créer des contrôles (comme un Label) pendant l'éxécution et non pendant le Design. Datagrid dynamique [ par jijilotwo ] Hyyyy, j'ai besoin de créer plusieurs datagrid en web mais je ne sais combien donc il faudrait les créer dynamiquement sans passer par le &l Créer un contrôle ActiveX qui interroge clé de registre [ par foreal ] Bonjour , je souhaite créer un controle ActiveX qui va récupérer l'identifiant de session qui se trouve dans la clé de registre et le stocke dans une Projet => Ajouter un élément existant [ par alonsyl ] bonjour,j'ai vu que dans "Projet => Ajouter un élément existant" je pouvais joindre une image (par exemple) a mon appli.desormais, je cherche a sav Créer un lecteur mp3 pour en faire un contrôle.... [ par fifrelin70 ] Bonjour à tous,Je poste très rarement mais là mes connaissances étaient insuffisantes j'ai recours à ce forum...Je m'explique : Je souhaiterais dans l


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,902 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales