Récupérer la form et le controle

Résolu
NewSky Messages postés 86 Date d'inscription dimanche 27 janvier 2002 Statut Membre Dernière intervention 20 février 2009 - 9 mars 2006 à 11:17
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 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.



Si quelqu'un peut m'aider, ce serait sympa.



Merci d'avance.

4 réponses

cs_DURANDO Messages postés 34 Date d'inscription jeudi 16 février 2006 Statut Membre Dernière intervention 21 mars 2006
9 mars 2006 à 13:57
Salut à toi,

Tu peux créer deux variables public dans ta form appelée:



'dans le formulaire appele form2

Public FormName as string

Public ControlName as string



'apres saisie repertoire tu fais :

Dim ctrl as control

Dim Forme as form

for each forme in VB.forms

If forme.Name = FormeName then exit for

next Forme

for each Ctrl in forme

If Ctrl.Name = ControlName then

Ctrl.text = "nom du repertoire"

exit for


next Ctrl



'Le formulaire appelant

Form2.FormName = ME.name

Form2.ControlName = Textbox1.name

Form2.Show



C'est assez succint, mais c'est un principe.




C'est pas parceque les c.. sont plus nombreux qu'ils ont forcément raison!(dixit Coluche)
Une seule ligne de conduite, l'objectivité.
3
cs_etniqs Messages postés 201 Date d'inscription mardi 7 octobre 2003 Statut Membre Dernière intervention 10 mai 2016
9 mars 2006 à 12:05
si on avait le code ce serait aussi sympa , on comprend rien....

coïto ergo sum
0
K@zuya Messages postés 306 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 15 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

K@zuya
0
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
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)

rvblogn
0
Rejoignez-nous