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# Discussion :

Communication entre 2 classes de 2 projets distincts


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2017
    Messages : 38
    Par défaut Communication entre 2 classes de 2 projets distincts
    Bonjour,
    J'ai une solution avec 2 projets :
    - projetA qui contient la classe CA. J'ai un ElementHost qui utilise un WPF de la classe CB
    - projetB qui contient la classe CB (un WPF).

    Lors d'event handler suite à des clics sur l'interface crée avec le WPF, je souhaite pouvoir appeler des méthodes de la classe CA à partir de la classe CB.
    Mon problème c'est que je ne peux pas référencer la classe CA dans la classe CB pour cause de référence circulaire.

    Savez vous comment je peux faire ?
    Merci !

  2. #2
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Bonsoir,

    Si tu rencontres un problème de référence circulaire c est que la structure de ton projet n est pas cohérente c est aussi simple que ça.

    ++

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2017
    Messages : 38
    Par défaut
    Si tu rencontres un problème de référence circulaire c est que la structure de ton projet n est pas cohérente c est aussi simple que ça.
    Qu'est ce qui n'est pas cohérent dans ma structure ? Pour utiliser un WPF, je ne vois pas comment faire autrement
    J'ai une solution avec 2 projets :
    - projetA qui contient la classe CA. J'ai mis dans le design un ElementHost qui utilise un WPF de la classe CB
    - projetB qui contient la classe CB (un WPF).
    Sur l'interface en utilisant WPF, j'ai mis plusieurs bouton et sur évenement de clic sur ces boutons je souhaite pouvoir lancer des méthodes qui sont nécessairement dans la classe CB vu que la classe CA ne me sert que pour l'interface.
    -> Ce n'est pas cohérent ?

  4. #4
    Membre expérimenté
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 176
    Par défaut
    Bonjour,

    Tu pourrais par exemple fournir à ton objet CB lors de son instanciation, une fonction Callback venant de CA.
    Comme cela, CB sait quelle fonction utiliser, sans avoir besoin de savoir à qui elle est ni où elle est.

    Bonne continuation.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2017
    Messages : 38
    Par défaut
    Tu veux dire passer la méthode en paramètre via un delegate lors de l'instanciation ?

    J'ai ouvert le fichier .Designer.cs du usercontrol de ma classe CA qui contient l'ElementHost (habituellement je ne le touche pas mais je ne vois pas comment faire autrement).
    Pour commencer j'ai essayé de passer en paramètre un string avant d'essayer avec une méthode.

    J'ai changé le constructeur de ma classe CB
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            // classe CB
            public UserControl1(string s) // ajout du string
            {
                InitializeComponent();
                //Label1.Content = s;
            }
    puis dans le .Designer.cs du usercontrol de ma classe CA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     this.userControl11 = new WPF_UI.UserControl1("Test"); // ajout de "Test"
    mais j'ai une erreur quelques ligne plus loin, sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.elementHost1.Child = this.userControl11;
    qui dit The variable 'userControl11' is either undeclared or was never assigned

    Qu'est ce qui cloche dans mon code ?

  6. #6
    Membre Expert
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Par défaut
    Bonjour,

    Effectivement, Il ne faut pas que ta classe CB référence la classe CA. La classe CB est utilisé par CA et non le contraire ! Donc si tu veux pouvoir exécuter du code de CA à un moment "décidé" par CB, tu peux utiliser soit une callback comme l'indique Kyroon, soit utiliser des events au niveau du UserControl WPF. Ta classe CA peut alors s'abonner à ces events. Exemple simplifié :

    Coté UserControl WPF :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public event EventHandler MyEvent;
    private void RaiseEvent()
    {
        MyEvent?.Invoke(this, new EventArgs());
    }
    Coté WinForm :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    private void InitializeWpf()
    {
         WpfUserControl aWpfUserControl = (WpfUserControl)elementHost1.Child;
         aWpfUserControl.MyEvent += WpfMyEvent;
    }
     
    private void WpfMyEvent(object sender, EventArgs e)
    {
        MessageBox.Show("MyEvent de WPF");
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 08/07/2013, 22h25
  2. communication entre les classes
    Par sara_qt dans le forum Qt
    Réponses: 0
    Dernier message: 11/04/2009, 20h11
  3. Communication entre une classe et un thread
    Par cs_ntd dans le forum C#
    Réponses: 2
    Dernier message: 24/10/2008, 10h49
  4. Communication entre les classes
    Par jagboys dans le forum MFC
    Réponses: 6
    Dernier message: 20/06/2006, 06h32
  5. Réponses: 3
    Dernier message: 22/11/2005, 11h12

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