begin process at 2010 02 10 14:25:53
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Visual Basic & VB.NET

 > 

Archives Visual Basic

 > 

Formulaire

 > 

Comment utiliser les methode d'un objet quand on ne dispose que du nom en string ?


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Comment utiliser les methode d'un objet quand on ne dispose que du nom en string ?

mardi 27 avril 2004 à 11:53:39 | Comment utiliser les methode d'un objet quand on ne dispose que du nom en string ?

angelia

Bonjour, je pb est simple et je me pose fréquement la question car dans de nombreux cas cela me simplifierai la vie. Exemple : Vous avez une table sur Access par exemple contenant 2 champs, 1 champ Numero qui est un integer et un champ NomForm qui est du texte et qui représente le nom d'un formulaire de VB.

Depuis VB je veux accéder aux méthodes d'un formulaire (notamment la méthode show pour l'afficher), pour cela l'utilisateur tape un numéro et je vais chercher le formulaire qui correspond au numéro, tapé par l'utilisateur, dans la table d'access.
Voila ce que j'essaye de faire :

'j'ai déclaré un nouveau Adodb.recordset qui s'appel "rst" pour aller chercher les info dans ma table, et j'ai récupéré le nom du formulaire (mais là n'est pas le probleme)

...
rst("NomForm").Show



Il ne comprend pas que je veux utiliser le contenu de mon champ de ma table comme étant le nom d'un objet!!
Comment faire ?????
Merci beaucoup d'avance de vos lumières
mardi 27 avril 2004 à 15:11:54 | Re : Comment utiliser les methode d'un objet quand on ne dispose que du nom en string ?

crenaud76

Normal qu'il ne comprenne pas ! res("NomForm") est une chaine de caractère et .Show est une méthode appartenant à la classe Form !! Mais on peux s'en sortir comme cela :

Public Function GetFormByName(byVal NomFrm as String) As Form
Dim Frm as Form
For Each Frm in Forms
If Frm.Name = NomForm Then
Set GetFormByName = Frm
Exit Function
EndIf
Next
Set GetFormByName = Nothing
End Function

... A mettre dans un module standard

Dim F as Form
F = GetFormByName(rst("NomForm"))
If Not F IUs Nothing Then
F.Show
Else
Msgbox rst("NomForm") & " n'existe pas)
EndIf

... A mettre la ou tu veux afficher ta form.
OK ?
Christophe R.
mardi 27 avril 2004 à 15:12:06 | Re : Comment utiliser les methode d'un objet quand on ne dispose que du nom en string ?

crenaud76

Normal qu'il ne comprenne pas ! res("NomForm") est une chaine de caractère et .Show est une méthode appartenant à la classe Form !! Mais on peux s'en sortir comme cela :

Public Function GetFormByName(byVal NomFrm as String) As Form
Dim Frm as Form
For Each Frm in Forms
If Frm.Name = NomForm Then
Set GetFormByName = Frm
Exit Function
EndIf
Next
Set GetFormByName = Nothing
End Function

... A mettre dans un module standard

Dim F as Form
F = GetFormByName(rst("NomForm"))
If Not F IUs Nothing Then
F.Show
Else
Msgbox rst("NomForm") & " n'existe pas)
EndIf

... A mettre la ou tu veux afficher ta form.
OK ?
Christophe R.
mardi 27 avril 2004 à 20:34:31 | Re : Comment utiliser les methode d'un objet quand on ne dispose que du nom en string ?

angelia


Merci deja de ta réponse. Je vais essayer le code ce soir, mais au fait le

for each form in Forms...

ne necessite pas que le formulaire soit déja chargé en mémoire? ou bien Forms est vraiment la collection de tous les formulaires du projet ?
Ensuite je pensais qu'il y avait plus simple car cela peut être un formulaire comme cela peut être un control, alors dans ce cas il faudrait presque un proc par type. Bref je dis cela car sur Windev par exemple, il existe un opérateur d''indirection" comme ils l'appelle :
par exemple


{"Nom"}={"Cl.NomCli"}

est équivalent à

Nom=Cl.NomCli

ou encore :

{"Formulaire"+.show}

est équivalent à

Formulaire.show

génial non ?!!! et bien je voulais savoir si il existait la même chose en Vb
Merci d'avance


mardi 27 avril 2004 à 20:46:09 | petite erreur...

angelia

j'essai ton principe de code et me met 2 erreurs dans le code :
la premiere est qu'il faut, à priori le mot clé "Set" devant


F = GetFormByName(rst("NomForm"))

je ne me trompe pas ?

et le second par contre, je ne comprend pas ton code :


If Not F IUs Nothing Then

il me dit qu'il y a une erreur de syntaxe !
je ne sais pas comment tu veux essayer de tester si l'objet est vide
Merci de ta réponse
mardi 27 avril 2004 à 20:49:18 | Re : petite erreur...

angelia


autant pour moi, c'est le code suivant


If Not F Is Nothing Then

il y avait un U en trop !!
sorry !
mardi 27 avril 2004 à 22:05:12 | Re : Comment utiliser les methode d'un objet quand on ne dispose que du nom en string ?

crenaud76

Ouais pardon pour les erreurs de frappe, mais j'ai fait le code directement sur le site sans le tester avant dans VB, alors il y a des coquilles !!
Par contre, le point que tu soulèves est fort exact, et je n'y avait pas pensée avant :
La collection "Forms" regroupe toutes les fenêtres CHARGEES de l'application. Si ta form n'est pas encore chargée, tu ne la verras pas (par aucun aute moyen d'ailleurs, je pense)
La solution est donc de pré-charger toutes tes forms par un
"Load Form1", "Load Form2", etc ...
Si jamais une fenêtre doit etre fermé et eventuellement réouverte, ne pas faire de "Unload Me" mais juste un "Me.Hide" (dans l'evt Query_Unload par exemple, en testant le UnloadMode avant bien sur) afin qu'elle soit juste masquée mais reste en mémoire.
J'espère que tu n'as pas 150 forms, sinon, ca va ramer sec

Christophe R.


Cette discussion est classée dans : table, objet, formulaire, utiliser, champ


Répondre à ce message

Sujets en rapport avec ce message

Modification de champ de une table Access [ par nirega ] Bonjour,j'ai un petit problème ;-(Je voudrai modifier le champ d'une table access d'après une valeur entrer dans un sous-formulaireex: j'ai une table addition de 2 champs [ par hamster2combat ] bonjourAprés certain pb lié à des addition dans un formulaire.Je souhaite créer un champ dans une table qui sera l'addition de 2 autres.Je remplis des enregistrer un objet ole depuis vb6.0 vers une table access [ par zmaai ] Bonjour à vous tous,J'ai une table dans une base access97 avec un champ ole "champ_ole". Dans mon projet vb6.0 j'ai une form avec un controle ole "OLE Evenement click sur champ de table [ par jojo68 ] Bonjour à tous,J'ai un formulaire directement lié à une table.Est il possible de définir un evenement en cliquant sur une des cellule de la table dans exploiter un objet OLE contenu dans une table dans un programme [ par bertholdt ] Bonjour,Je suis actuellement en train de développer une appli qui utilise comme source de données une base access 2002. L'une des tables contient des Créer un champ image dans ACCES [ par shaka17 ] Bonjour,Voila mon problème:Je voudrais dans un formulaire créer un champ dans lequel s'afficherait une image qui serait dépendante d'une table ou sera je voudrais utiliser la table et le formulaire uniquement pour la consultation et la saisie [ par buccelli ] bonjours,je voudrais utiliser la table et le formulaire uniquement pour la consultation et la saisie sans (suppression / modification)et sans utiliser filtre table sous formulaire [ par TiteufA44 ] Bonsoir à tous, Débutant en VBA Access 2000, je souhaiterais résoudre un (petit) problème : J'ai une BD avec une seule Table (et une vingtaine de ch formulaire muticritéres [ par sanae88 ] Bonjour, je fait un formulaire multicritéres , je veux que le sous formulaire affiche les champs d'une table correspondant au champ choisi dans la lis graphique dans access par vba [ par chaudier37 ] bonjourvoila j'ai fait un petit travail sur access. ce sont des fichier de malades qui entrent dans un service d'amaigrissement.dans un formulaire je


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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 : 1,700 sec (4)

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