NewSky
Messages postés86Date d'inscriptiondimanche 27 janvier 2002StatutMembreDernière intervention20 février 2009
-
9 mars 2006 à 11:17
rvblog
Messages postés792Date d'inscriptionvendredi 4 mars 2005StatutMembreDernière intervention12 juin 2012
-
15 mars 2006 à 09:48
Bonjour, je suis en train de développer un petit projet dans lequel je rencontre un léger problème.
J'ai un formulaire qui peut être appellé par plusieur autres. Ce
formulaire permet de choisir un repertoire (avec un controle dir et
drive).
Imaginons que sur un 1er formulaire, j'ai un contrôle textbox et un
bouton. Lorsque je clic sur le bouton, ça ouvre le 2ème formulaire de
choix du repertoire et lorsqu'on valide, ça inscrit le chemin dans le
textbox du 1er formulaire
Comme ce formulaire peut être appellé par différentes feuilles tout en
réalisant la même opération, j'ai besoin de savoir pour quel contrôle
de quelle feuille la réponse doit aller et ce dynamiquement.
j'avais donc créer deux textbox dans le 2ème form dans lequel
j'inscrivais lors du clic le nom de la feuille et du controle devant
recevoir la réponse. J'ai créer 2 variables de type form et textbox
auquels j'attribue les valeurs ainsi récupérées. Mais ça ne marche pas,
il me dit qu'un objet et nécessaire.
K@zuya
Messages postés306Date d'inscriptionvendredi 21 février 2003StatutMembreDernière intervention15 février 2016 9 mars 2006 à 13:53
Ce que tu a fait est un peu du bricolage, il existe des controles tout fait pour permettre à l'utilisateur de selectionner un dossier, quoi qu'il en soit, pour poursuivre avec ta methode, tu n'a pas besoin de creer un textbox supplémentaire sur ta form de choix de dossier (appelons la chd).
Tu peux utiliser le .Tag de ta form chd, par exemple, lorsqu'une form appelle ton chd, tu fais:
chd.Tag = "FRM MACHIN"
chd.show
ensuite, lorsque l'utilisateur à choisi son dossier, tu cree un bouton valider sur ta form chd et dans l'évènement:
Private Sub CommandOK_Click()
tu met un code dans ce style:
Select Case Tag
Tag "FRM MACHIN
FrmMachin.text1.text = text_dossier.txt
Tag "FRM TRUC"
FrmTruc.text1.text = text_dossier.txt
End select
rvblog
Messages postés792Date d'inscriptionvendredi 4 mars 2005StatutMembreDernière intervention12 juin 20127 15 mars 2006 à 09:48
Salut NewSky, Kazuya, Durando,
je sais bien qu'une réponse a déjà été faite, mais je vais quand même me permettre d'en ajouter.
Il existe une technique fort simple, préconisée par Microsoft, qui consiste à dire que ton formulaire de recherche de chemin ne doit pas aller écrire dans un autre formulaire appelant, son job, c'est de permettre de trouver un chemin (comme une inputbox, elle ne va pas écrire sa chaîne ailleurs, c'est l'appelant qui la récupère), à l'appelant de récupérer les infos. Qui plus est, un formulaire ainsi dédié répond à un des critères les plus intéressant de la maintenabilité d'une application : la réutilisabilité.
1./
Crées ton formulaire de recherche de chemin (ou de ce que tu veux), sans te préoccuper de qui l'appelera. (un formulaire est une classe avec une interface graphique, n'importe qui l'instancie et utlise le service qu'elle offre [la classe]). Ajoute seulement 2 boutons groupés (ex: name cmdCommandes, cmdCommandes(0).caption= "Valider", et cmdCommandes(1).caption="Annuler"). La section de code répondant à l'évènement Click de ce groupe de boutons ressemblera à ce qui suit :
Private Sub cmdCommandes_Click(Index As Integer)
With Me
Select Case Index
Case 0 'Valider
.Tag = vbYes
Case 1 'Annuler
.Tag = vbNo
End Select
. Hide 'ne fait que cacher le formulaire
End With
End Sub
Voilà pour ce formulaire, il n'y a rien d'autre à faire pour lui, si ce n'est ajouter des services.
2/.
Voici un appel, canonique, réalisé à partir de n'importe quel autre formulaire (c'est la méthode I.P.A.R.L.E., et en l'occurrence, pas pour ne rien dire)
Dim frmTemp As frmRechercheChemin' la classe du formulaire de recherche
Dim strCheminChoisi As String
'I.nstanciation et référencement implicite de la classe du formulaire de recherche
Set frmTemp = New frmRechercheChemin
'P.réparation des données de ce formulaire (ou d'un tas d'autres choses)
frmTemp.drvLecteur = "C:"
frmTemp.dlbChemin = "C:"
' A .ffichage du formulaire, modalement, avec référence du parent
frmTemp.Show vbModal, Me
'R.écupération des données du formulaire
If frmTemp.Tag = vbYes Then
strCheminChoisi = frmTemp.txtChemin.Text
End If
' L .ibération de la référence après déchargement de l'instance
Unload frmTemp
Set frmTemp = Nothing
'E.xécution de la suite
Tu noteras, qu'en A., on sollicite la méthode Show en lui passant 2 arguments importants, le premier est la constante vbModal, le 2ème la référence du parent de la modalité (depuis VB6), qui ne peut qu'être un formulaire. Cela a pour conséquence que le formulaire de recherche s'affichera sans que l'utilisateur ne puisse revenir au formulaire appelant sans cliquer un des 2 boutons du formulaire de recherche. Si tu regardes l'exécution du code en mode "pas à pas", tu observeras que le point d'exécution de VB passe :
- par la sollication de la méthode Show
- puis, par le Form_Load du formulaire appelé (si le Form_Load existe)
reste dans le formulaire appelé, jusqu'à ce qu'il soit caché, et ensuite seulement passe :
- par la récupération des données.
Voilà, c'est tout, évidemment, si tu adhères à la méthode I.P.A.R.L.E, il est possible que tu aies beaucoup de code à reprendre, mais en informatique, il ne faut pas faire d'affectif, il faut savoir jeter et tout recommencer, quand le bon sens et l'évidence le commandent.
Ensuite, par ce que le courage t'emplit de bonne volonté tous les matins, il ne reste plus qu'à faire un contrôle utilisateur encapsulant tout ça, et bien d'autres services que tu sauras ajouter, à le compiler en Contrôle Active X autonome, et à le publier sur ce site (en FreeWare naturellement)