OVH Cloud OVH Cloud

dialogue entre fenêtre

9 réponses
Avatar
grome
Bonjour à tous,

Je suis un peu coincé sur un pb assez simple.

J'ai une fenêtre A qui appelle une fenêtre B. Cet appel est effectué à
l'aide d'un bouton de commande. La fenêtre B après différentes actions de
l'utilisateur ramène une valeur dans un textbox de la fenêtre A.

Seulement voilà comment faire si deux instance de la fenêtre A sont ouvertes
?
Comment la fenêtre B peut savoir sur laquelle des deux fenêtre A il faut
renvoyer la valeur ?

Faut il utiliser les API windows ou bien est ce géré sous VB ?

Merci d'avance

grome

9 réponses

Avatar
François Picalausa
"grome" a écrit dans le message de
news:3fb8d6be$0$10403$
Je suis un peu coincé sur un pb assez simple.

J'ai une fenêtre A qui appelle une fenêtre B. Cet appel est effectué à
l'aide d'un bouton de commande. La fenêtre B après différentes
actions de l'utilisateur ramène une valeur dans un textbox de la
fenêtre A.

Seulement voilà comment faire si deux instance de la fenêtre A sont
ouvertes ?
Comment la fenêtre B peut savoir sur laquelle des deux fenêtre A il
faut renvoyer la valeur ?

Faut il utiliser les API windows ou bien est ce géré sous VB ?



Bonjour/soir,

Dans la fenêtre B, tu pourrais éventuellement utiliser une variable publique
ou une propriété de type fenêtre A et qui serait rempli à l'appel par
fenêtre A.

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com
Avatar
grome
Effectivement, je pourrais faire çà. Mais c'est déjà ce que je fais dans
toute l'appli et çà commence à manquer de clarté.
Il faudrait que je trouve un moyen de clarifier tout cela en me rapprochant
de la progra windows. En utilisant les handles par exemple.

grome


Dans la fenêtre B, tu pourrais éventuellement utiliser une variable


publique
ou une propriété de type fenêtre A et qui serait rempli à l'appel par
fenêtre A.



Avatar
grome
En plus je parlais d'instance de la fenêtre A... donc le comportement est
le même dans les deux fenêtres A. La variable sera valorisée dans les deux
cas. Je pourrais passer à la fenêtre B le handle de la fenêtre appelante.
Mais je sais pas quoi en faire de ce handle. Comment l'utiliser pour
affecter la valeur dans le textbox.

Merci d'avance pour votre aide

grome


Dans la fenêtre B, tu pourrais éventuellement utiliser une variable


publique
ou une propriété de type fenêtre A et qui serait rempli à l'appel par
fenêtre A.

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com




Avatar
François Picalausa
"grome" a écrit dans le message de
news:3fb8f829$0$10411$
En plus je parlais d'instance de la fenêtre A... donc le
comportement est le même dans les deux fenêtres A. La variable sera
valorisée dans les deux cas. Je pourrais passer à la fenêtre B le
handle de la fenêtre appelante. Mais je sais pas quoi en faire de ce
handle. Comment l'utiliser pour affecter la valeur dans le textbox.



Bonjour/soir,

Tu peux passer le handle du textbox:
Tu le récupère par TextBox.hWnd et ensuite, par l'API SetWindowText, tu
pourra compléter le champ.
Si tu as plusieurs champs, tu devra stoquer plusieurs hWnd. Autre
possibilité, stoquer le hWnd de la feuille et énumérer les fenêtres filles.
Ce sera plus lourd que de stoquer une référence à un objet de type FormA
dans ton FormB.
Le traitement ne sera par ailleurs pas grandement simplifié (ce sera même
AMHA l'inverse).

Autre possibilité, je ne comprends pas ce que tu veux faire ;O)

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com
Avatar
scraper
Dans son post news:3fb8d6be$0$10403$,

grome a absolument tenu à nous dire :

Bonjour à tous,

Je suis un peu coincé sur un pb assez simple.

J'ai une fenêtre A qui appelle une fenêtre B. Cet appel est effectué à
l'aide d'un bouton de commande. La fenêtre B après différentes
actions de l'utilisateur ramène une valeur dans un textbox de la
fenêtre A.

Seulement voilà comment faire si deux instance de la fenêtre A sont
ouvertes ?
Comment la fenêtre B peut savoir sur laquelle des deux fenêtre A il
faut renvoyer la valeur ?

Faut il utiliser les API windows ou bien est ce géré sous VB ?

Merci d'avance

grome



salut !

et pourquoi ne pas autoriser qu'une seule instance ?

AMHA, ton problème disparaitrait !! :-)



--

Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm

scraper
Avatar
Guy DETIENNE
Salut ;O)

Selon moi et pour que ton application ait en comportement logique, tu ne
devrais pas pouvoir tomber dans ce cas de figure.
Vois donc s'il est réellement nécessaire de pouvoir ouvrir 2 instances de la
fenêtre A.

De toute façon, si 2 fenêtres A sont ouvertes, l'unique fenêtre B est
incapable de déduire où envoyer la valeur de la TextBox.

Guy

--
__________________________________
Tchao.net: L'informatique à votre dimension
www.tchao.net
Pour toute réponse, retirer le .nospam de l'adresse mail
ou cliquez ici http://cerbermail.com/?6nQ9U2fpkD

"grome" a écrit dans le message de
news:3fb8d6be$0$10403$
Bonjour à tous,

Je suis un peu coincé sur un pb assez simple.

J'ai une fenêtre A qui appelle une fenêtre B. Cet appel est effectué à
l'aide d'un bouton de commande. La fenêtre B après différentes actions de
l'utilisateur ramène une valeur dans un textbox de la fenêtre A.

Seulement voilà comment faire si deux instance de la fenêtre A sont


ouvertes
?
Comment la fenêtre B peut savoir sur laquelle des deux fenêtre A il faut
renvoyer la valeur ?

Faut il utiliser les API windows ou bien est ce géré sous VB ?

Merci d'avance

grome




Avatar
grome
Oui c'est vrai mais dans une appli MDI tu peux très bien avoir deux
instances d'une même fenêtre. Si on ouvre une boite de dialogue (la mienne
est censé ramener une valeur dans un textbox de la fenêtre d'appel) , il
faut bien qu'elle sache avec quelle fenêtre dialoguer.

En espérant être un peu plus clair.

En général, lorsque une fenêtre F de mon appli communique avec plusieurs
fenêtres j'utilise une variable au niveau de la fenêtre F qui est valoriser
par la fenêtre d'appel. Seulement je me demandais si il ne serait pas plus
simple de manipuler des Handles et me rapprocher un peu plus des concepts de
la programmation windows. On est très proche de ces concept avec des AGL
comme Centura (gupta pour ceux qui connaissent) tout en gardant une rapidité
de développement importante.

Voilà, mais peut être que je me fais des noeuds au cerveau pour pas grand
chose.

Jérôme



salut !

et pourquoi ne pas autoriser qu'une seule instance ?

AMHA, ton problème disparaitrait !! :-)



--

Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm

scraper



Avatar
grome
Pour le SetWindowText cela fonctionne mais le problème c'est que je fais pas
que çà. J'affecte aussi des valeurs dans des variables de niveau fenetre. Je
controle l'affichage de frame et le blocage de certaines zones.

je fais cela de la manière suivante.

Lorsque je suis sur la fenêtre B, au moment de valider je recherche la
fenêtre d'appel avec un SELECT CASE sur la variable qui d'habitude me sert à
gérer cela. Le problème se situe par la suite lorsque je fais référence à
frmCatalog puisque à ce moment j'ai deux fenêtre frmCatalog d'ouverte.

Select me.sFenAppel

Case "frmCatalog"

'--- Il y a une arborescence dans B sur laquelle je fais un choix
'--- valeur renvoyé dans le textbox de la fenetre A (A c'est
frmCatalog)
frmCatalog.txtCategorie = Me.trwCateg.SelectedItem.Text
'--- je recupère l'identifiant DB du noeud selectionné
frmCatalog.lCafID = Me.trwCateg.SelectedItem.Tag
'---
frmCatalog.frmCritAccessoire.Visible = True
frmCatalog.frmCritBois.Visible = False

Est ce qu'il n'y a pas un moyen de référencer à coup sur la bonne fenetre
frmCatalog en se servant du handle ou même une autre manière. frmCatalog(1)
par exemple




Bonjour/soir,

Tu peux passer le handle du textbox:
Tu le récupère par TextBox.hWnd et ensuite, par l'API SetWindowText, tu
pourra compléter le champ.
Si tu as plusieurs champs, tu devra stoquer plusieurs hWnd. Autre
possibilité, stoquer le hWnd de la feuille et énumérer les fenêtres


filles.
Ce sera plus lourd que de stoquer une référence à un objet de type FormA
dans ton FormB.
Le traitement ne sera par ailleurs pas grandement simplifié (ce sera même
AMHA l'inverse).

Autre possibilité, je ne comprends pas ce que tu veux faire ;O)

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com




Avatar
François Picalausa
"grome" a écrit dans le message de
news:3fb9d96c$0$10416$
Est ce qu'il n'y a pas un moyen de référencer à coup sur la bonne
fenetre frmCatalog en se servant du handle ou même une autre manière.
frmCatalog(1) par exemple



Bonjour/soir,

Quand tu emploie un objet de type form1 et contenant ton form1, tu n'as rien
de plus qu'un pointeur (un handle est aussi un pointeur).
La seule chose, c'est que tu n'as pas un accès direct au pointeur...
Mais si tu veux le connaitre, un simple ObjPtr(Object) suffit!

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com