IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++/CLI Discussion :

C++/CLI : gestion de fen�tres filles � partir d'une fen�tre m�re


Sujet :

C++/CLI

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �clair�
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    243
    D�tails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 243
    Par d�faut C++/CLI : gestion de fen�tres filles � partir d'une fen�tre m�re
    Bonjour,

    Pose de mon probl�me:

    J'ai une application avec une Form que j'appelle "m�re"; cette Form contient une listView avec diff�rents Items.

    Quand l'utilisateur fait un doubleClick sur un Item de la listView l'application ouvre une fen�tre que j'appelle "fille".

    Cette fen�tre "fille" permet � l'utilisateur d'agir sur les param�tres de l'Item s�lectionn�.

    L'utilisateur doit pouvoir avoir plusieurs fen�tres "filles" ouvertes en m�me temps ...

    Jusque l� pas de probl�me

    Par contre c'est l� que mon probl�me arrive:

    Quand l'utilisateur fait un doubleClick sur un Item qui poss�de d�j� une fen�tre fille ouverte, je voudrais que cette fen�tre soit r�veill�e pour attirer l'attention de l'utilisateur.

    Le probl�me est que chaque fen�tre "fille" une fois ouverte vit sa vie seule et que l'application qui a lanc� les fen�tres "fille" conna�t tout juste leur existence, mais ne sait rien d'autre ..

    Je n'ai aucune id�e de comment faire �a proprement.

    Si quelqu'un pouvait m'aiguiller ce serait sympa.

    Bonne journ�e

  2. #2
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Ta fen�tre "fille" (en fait, plut�t une fen�tre "owned") c'est une Form^ (ou classe descendante de Form) �galement, non?

    Tu peux m�moriser sa r�f�rence dans ta Form principale une fois qu'elle est ouverte, et interagir avec lors d'un clic...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 504
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 504
    Par d�faut
    WinForms, je suppose.
    La m�thode Activate de la classe Form.
    http://msdn.microsoft.com/en-us/libr...v=vs.110).aspx

    Vous faites en sorte que dans le constructeur de la classe du "sous" formulaire, il appel une m�thode d'enregistrement de l'objet "formulaire racine".
    Dans les m�thodes Close du "sous" formulaire, vous appelez une m�thode de d�senregistrement.
    La classe racine n'a qu'a stocker ces r�f�rences dans une table d'association et appeler la m�thode Activate sur ces r�f�rences au moment opportun.

  4. #4
    Membre �clair�
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    243
    D�tails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 243
    Par d�faut
    Merci Bacelar,

    Je regarde �a d�s que je peux.

    Avant d'ouvrir la Form "fille" l'application "m�re" stocke des donn�es dans un singleton qui sert de boite aux lettres. La Form "fille" s'ouvre et r�cup�re les donn�es, puis vit sa vie ind�pendamment.

    Toutes les Forms "fille" sont ouvertes � partir du m�me �v�nement ItemActivate de la listView et de la m�me fa�on.

    Dans le traitement de l'�v�nement je recherche d'abord quel Item a �t� cliqu� dans la listView, je stocke les donn�es correspondante � l'Item dans le singleton, puis je lance la fen�tre fille par ces 2 lignes.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     Formulaire ^ Form2 = gcnew Formulaire;
     Form2->Show (this);
    La fen�tre fille en s'ouvrant r�cup�re ses donn�es dans le singleton, puis fonctionne comme une fen�tre ind�pendante.

    L'utilisateur peut alors double cliquer sur un autre Item de la listView et disposer d'une seconde fen�tre, puis d'une 3i�me et ainsi de suite.

    Bonne soir�e

  5. #5
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 504
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 504
    Par d�faut
    Pourquoi passer par un singleton.
    Le plus simple est de passer par des param�tres du constructeur.
    Passez en param�tre aussi le formulaire parent.
    Dans le constructeur de votre Form Fille, enregistrez la en appelant un m�thode d�di�e de votre Form principale.
    Dans le Close de la fen�tre de vos fen�tres secondaire, vous appelez la m�thode de d�senregistrement de votre Form principale.
    ...
    Dans la m�thode d'enregistrement de votre Form principale, vous associez la Form secondaire � une cl� dans une table d'association.
    Dans la m�thode de d�senregistrement de votre Form principale, vous supprimez cette association.

    Dans ItemActivate, on commence par lire la table d'association et faire un Activate sur le formulaire secondaire s'il est enregistr�, sinon on cr�e le formulaire secondaire, en passant en param�tre les informations n�cessaires.

  6. #6
    Membre �clair�
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    243
    D�tails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 243
    Par d�faut
    Citation Envoy� par bacelar Voir le message
    Pourquoi passer par un singleton.
    C'est parce que je ne sais pas faire autrement.


    Citation Envoy� par bacelar Voir le message
    Le plus simple est de passer par des param�tres du constructeur.
    Passez en param�tre aussi le formulaire parent.
    Je ne me suis jamais trop pench� sur la fa�on utilis�e par Visual pour construire les Form ...
    Je me contente d'utiliser l'interface graphique.

    J'ai beaucoup programm� en assembleur, puis en Fortran et en C et la programmation objet reste encore une science un peu obscure pour moi.

    Merci, je vais essayer de comprendre mais pour l'instant il m'a fallu d�placer mes priorit�s.

    Bonne journ�e.

  7. #7
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 504
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 504
    Par d�faut
    Le passage de param�tres, c'est comme en C.

  8. #8
    Membre �clair�
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    243
    D�tails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 243
    Par d�faut
    Citation Envoy� par bacelar Voir le message
    Dans ItemActivate, on commence par lire la table d'association et faire un Activate sur le formulaire secondaire s'il est enregistr�, sinon on cr�e le formulaire secondaire, en passant en param�tre les informations n�cessaires.

    En fait c'est �a que je ne vois pas comment faire ...

    Vu de Form1 toutes les Form2 sont les m�mes et comment en r�veiller une plut�t qu'une autre ...

    Bonne soir�e

  9. #9
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    private:
    	Dictionary<int, Form2^> formulairesOuverts;
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Expert confirm�
    Avatar de Mat.M
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 538
    D�tails du profil
    Informations personnelles :
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 538
    Par d�faut
    Citation Envoy� par jlg_47 Voir le message
    L'utilisateur doit pouvoir avoir plusieurs fen�tres "filles" ouvertes en m�me temps ...
    une interface MDI serait plus appropri�e ; est-ce le cas ?

  11. #11
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Un simple Activate() sur le form devrait suffire. Il m'a fallu moins d'une minute pour trouver �a, en comptant la recherche Google!
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  12. #12
    Membre �clair�
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    243
    D�tails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 243
    Par d�faut
    Citation Envoy� par M�dinoc Voir le message
    Un simple Activate() sur le form devrait suffire. Il m'a fallu moins d'une minute pour trouver �a, en comptant la recherche Google!

    D�sol�, Le probl�me n'a jamais �t� au niveau de l' "Activate" .

    Je n'aurais pas d� rouvrir un post qui �tait marqu� "r�solu" .. Je comprends tr�s bien que vous n'avez pas le temps de relire un post depuis le d�but.

    Le probl�me �tait de ne pas g�n�rer x fois la m�me fen�tre dans l'Activate, mais de lui redonner le Focus si elle existe d�j�.

    Gr�ce � Bacelar et vous m�me ce probl�me est r�solu et je vous en remercie encore

    Le second probl�me a �t� de sauvegarder l'�tat des fen�tres � la fermeture de l'application.

    J'avais fait un truc qui marchait mais j'�tais assez lucide pour me rendre compte que c'�tait tarabiscot� asynchrone et merdique ....

    Bacelar m'en a fait la remarque, je m'y attendais !!

    Depuis j'ai am�lior�, j'ai vir� les timers inutiles et rendu la fermeture synchrone en passant par "Unregister" ..

    En ce moment j'�tudie comment faire �a de fa�on plus propre en cr�ant une couche m�tier ...

    Donc je suis en train d'apprendre � faire des threads en C++/CLI ...

    Le probl�me pr�sent est r�solu et gr�ce � Bacelar et vous m�me j'ai appris � manipuler les Dictionnary et leurs clefs

    Merci encore

    Bonne soir�e

  13. #13
    Expert confirm�
    Avatar de Mat.M
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 538
    D�tails du profil
    Informations personnelles :
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 538
    Par d�faut
    Citation Envoy� par jlg_47 Voir le message
    D�sol�, Le probl�me n'a jamais �t� au niveau de l' "Activate" .
    Medinoc a me semble-t-il donn� la bonne solution , je n'ai pas trop pig� ton probl�me qui semble sacr�ment tarabiscot� et compliqu�...
    Citation Envoy� par jlg_47 Voir le message
    Le second probl�me a �t� de sauvegarder l'�tat des fen�tres � la fermeture de l'application.
    ??
    L'�tat des fen�tres ? Si tu sauvegardes un Handle de fen�tre � la fermeture de l'application il sera invalide par la suite on ne peut sauvegarder que les positions �cran des fen�tres
    Tout cela me semble compliqu�
    Ensuite encore une fois il ne faut pas g�rer des threads inutilement �a va ralentir l'application
    Citation Envoy� par bacelar Voir le message
    Je suis extr�mement circonspect sur la n�cessit� de cette usine � gaz.
    .
    on est au moins 2

  14. #14
    Membre �clair�
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    243
    D�tails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 243
    Par d�faut
    Citation Envoy� par Mat.M Voir le message
    L'�tat des fen�tres ? Si tu sauvegardes un Handle de fen�tre � la fermeture de l'application il sera invalide par la suite on ne peut sauvegarder que les positions �cran des fen�tres
    Je ne vois pas o� est le probl�me � vouloir sauvegarder l'�tat complet d'une fen�tre au moment o� on la ferme de fa�on � ce qu'elle s'ouvre dans le m�me �tat la fois suivante.

    C'est tout ce que je voulais faire et je n'avais pas pens� � utiliser Unregister pour faire �a ... Maintenant cela marche nickel sans usine � gaz !!

    Merci � tout le monde.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 3
    Dernier message: 10/05/2012, 14h35
  2. R�ponses: 1
    Dernier message: 26/12/2010, 19h29
  3. R�ponses: 1
    Dernier message: 22/08/2007, 09h50
  4. Controler une fen�tre a partir d'une autre fen�tre
    Par Invit� dans le forum G�n�ral JavaScript
    R�ponses: 11
    Dernier message: 24/08/2006, 21h21
  5. Afficher une Fen�tre MDI � partir d'une DLL
    Par FredericB dans le forum C++Builder
    R�ponses: 2
    Dernier message: 06/12/2005, 16h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo