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

Windows Forms Discussion :

Communication entre 2 projets dans une même solution


Sujet :

Windows Forms

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Communication entre 2 projets dans une même solution
    Bonjour à tous,
    J'ai pour la 1ere fois développé une solution avec plusieurs projets dedans. J'ai créé dans les propriété les dépendances nécessaires pour avoir par exemple le projet MAIN utilisant les fonctions des classes du projet UTILITIES.
    Mon problème est le suivant : des données utilisées dans MAIN sont modifiées par les fonctions de UTILITIES, comment renvoyer ces informations modifiées à MAIN? De façon plus générale, comment créer un dialogue bi-directionnel entre les projets d'une même solution?
    Merci pour vos réponses éclairées.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Pour pouvoir te répondre précisément il faudrait que tu décrives plus concrètement ce que tu cherches à faire...

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    OK.
    J'ai une appli principale :MAIN qui à un objet Panel.
    Cette appli, suivant les options choisies pas l'utilisateur, appelle des UserControl. J'ai une TRES large gamme de UserControl, ce qui me pousse, par soucis de clarté et d'organisation, à les séparer dans des projets distincts, tous appartenant à une seule et même solution.

    J'ai 2 besoins :
    Le 1er c'est d'avoir la possibilité aux UserControls de modifier une Collection gérée dans le MAIN. Dans un sens c'est OK. MAIN instancie l'objet UserControl concerné, et passe la Collection au UC qui l'utilise en fonction des choix du user.
    Et la mon soucis c'est de renvoyer cette Collection au MAIN.

    Ensuite, dans le même principe le UC, une fois ses tâches terminées, doit utiliser une fonction du MAIN pour que MAIN sache quel UC vient de se terminer et en fonction de ca qu'est-ce qu'il doit faire. la encore je dois communiquer de mon UC dans un projet vers le MAIN qui se trouve dans un autre.

    D'un sens vers l'autre, pas de soucis, dans les propriété de la solution je dis que MAIN dépend des autres projets où se trouvent les UC. Si je veux faire pareil des UC vers le MAIN, j'ai une référence cyclique, ce qui n'est pas possible...

    Voila, j'espère que j'ai été assez clair

    L'idée serait :
    -un objet de communication propre à tous les projets
    -un variable globale, elle aussi propre à tous les projets
    -autre???...

    Merci!

  4. #4
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Décembre 2008
    Messages : 256
    Points : 311
    Points
    311
    Par défaut
    Citation Envoyé par Alex972 Voir le message
    OK.
    J'ai 2 besoins :
    Le 1er c'est d'avoir la possibilité aux UserControls de modifier une Collection gérée dans le MAIN. Dans un sens c'est OK. MAIN instancie l'objet UserControl concerné, et passe la Collection au UC qui l'utilise en fonction des choix du user.
    Et la mon soucis c'est de renvoyer cette Collection au MAIN.
    Il n'y a pas de problème particulier ! Si ta Collection a été instanciée par le Main, celui-ci doit maintenir une référence vers ta Collection pendant et après le travail de ton UC. En fait c'est le UC qui y accède par référence.

    Ensuite, dans le même principe le UC, une fois ses tâches terminées, doit utiliser une fonction du MAIN pour que MAIN sache quel UC vient de se terminer et en fonction de ca qu'est-ce qu'il doit faire.
    Non! Comme c'est le MAIN qui déclenche le UC, c'est le MAIN qui sait LEQUEL a été déclenché, et donc le MAIN doit savoir quoi faire après... Enfin, c'est comme ça que je ferais... mais peut-être que j'ai mal compris ce que tu essaies de faire.
    Il y a toujours au moins deux solutions à un problème.

    http://software-design-development.blogspot.com/

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci Gold Bug pour ta réponse, cependant

    Il n'y a pas de problème particulier ! Si ta Collection a été instanciée par le Main, celui-ci doit maintenir une référence vers ta Collection pendant et après le travail de ton UC. En fait c'est le UC qui y accède par référence.
    le soucis c'est de mon UC je n'arrive pas a accéder à cet objet, a part si je le passe par le biais d'une fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    MAIN :
    dim new UC as Projet2.UC
    UC.fonctiondePassation(MaCollection)
    
    De l'autre coté (UC)
    private sub fonctiondePassation (UneCollection)
          Je modifie MaCollection
    end sub
    Ca c'est ce que je fais, mais je n'arrive pas a voir cette Collection dans mon projet2 si je ne fais pas ca. J'aurais aimer pouvoir taper :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    de l'autre coté (UC) (une fois instancié dans le MAIN)
    MAIN.MaCollection
    Mais il ne reconnait pas MAIN car dans un projet différent...


    Et pour le second point :
    Comme c'est le MAIN qui déclenche le UC, c'est le MAIN qui sait LEQUEL a été déclenché, et donc le MAIN doit savoir quoi faire après...
    Mon soucis, c'est que en effet le MAIN sait qui il a déclanché, par contre c'est DE l'UC qui qui à été appelée par le MAIN que va se décider quelle autre UC va devoir succéder. Et je trouvais plus "propre" et plus facile à maintenir le fait de repasser toujours par le MAIN plutôt que d'un UC à l'autre... D'où la fonction que j'ai créé dans le MAIN :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MAIN :
    Public sub OuvreLeBonUC (UCPrécedent, UCSuivant, MaCollection)
    Mais que je ne peux pas appeller de mon autre projet...

  6. #6
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Décembre 2008
    Messages : 256
    Points : 311
    Points
    311
    Par défaut
    Ton problème est assez curieux, parce que normalement, y'a rien de particulier à faire, à partir du moment où tes classes sont dans des Namespaces qui se voient.
    Mais si dans le Namespace A, tu importes le Namespace B, et que dans le Namespace B tu fais essaies d'importer le Namespace A, effectivement il y a une référence circulaire et ça ne compilera pas.

    Donc je pense que tu as un problème de Design...
    Tu devrais peut-être essayer de repenser la responsabilité de chacune de tes classes et notamment de tes User Controls...
    Il y a toujours au moins deux solutions à un problème.

    http://software-design-development.blogspot.com/

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Pour Info, ce que j'ai fait au final :

    Dans le projet contenant les UserControl

    J'ai défini une classe CommonVariables dans laquelle se trouve:
    -ma collection a modifier
    -une autre collection qui contiendra LaProvenenceDeUC et LaDestinationDeUC
    -un booléen IsFinished

    ces variables sont en public shared

    Dans le MAIN
    un timer qui check toutes les secondes si IsFinished est set to true
    Si oui, il interroge la collection qui lui indiquera la marche a suivre

    Ca à l'air de tourner. J'aurais préféré ne pas utiliser de timer mais bon...

    Merci quand même Gold Bug.

Discussions similaires

  1. [Débutant] Partager des javascripts entre plusieurs projets d'une même solution
    Par antrax2013 dans le forum ASP.NET
    Réponses: 6
    Dernier message: 12/12/2012, 10h59
  2. Réponses: 2
    Dernier message: 16/12/2009, 13h36
  3. Référence entre plusieurs projets d'une même solution
    Par robertlafrite dans le forum Windows Forms
    Réponses: 9
    Dernier message: 04/07/2008, 09h56
  4. Réponses: 11
    Dernier message: 13/03/2008, 11h06
  5. [VB.NET] Var globales sur plusieurs projets d'une même solut
    Par boulete dans le forum Windows Forms
    Réponses: 8
    Dernier message: 16/02/2006, 14h04

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