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 :

Interaction entre 2 UserControl par event


Sujet :

C#

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 153
    Points : 76
    Points
    76
    Par défaut Interaction entre 2 UserControl par event
    Bonjour,
    Ma question est à priori simple mais je ne trouve pas encore la solution qui règle mon problème..
    j'ai inclut dans un UserControl 2 usercontrols cote à cote (séparé par un splitcontener), je souhaiterais interagir entre ces 2 UC:
    en gros quand je fais une modification dans UC1 (suppression,création.. d'un élément d'une liste), je veux que mes combox qui se trouve dans UC2 se mette à jour.
    Pour cela, j'ai commencer à faire la chose suivante:
    Dans le UC1 j'ai créer un event comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     public delegate void EventHandler(object sender, SampleEventArgs e);
            public event EventHandler Modified;
     
            public class SampleEventArgs
            {
                public SampleEventArgs(string s) { Text = s; }
                public String Text { get; private set; } // readonly
            }
    Dans le code de ce même UC1: je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (Modified!= null)
                {
                Modified(this, new SampleEventArgs("NewLoad"));
                }
    dans l'évenement de supression ou creation d'un élement.
    et puis dans le constructeur de User control parent (de UC1 et UC2) je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    UC1.Modified+= new UC1.EventHandler(fonctionAExecuter);
     
    puis:
            private void fonctionAExecuter(object sender, UC1.SampleEventArgs e)
            {
                this.UC2.Reload();
            }
    et dans le UC2 j'ai ma fonction à executer pour mettre à jours les élements:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public void Reload()
            {
    .....Code de mise à jour
    }

    Mais l'événement envoyé est toujours null.j'ai raté quelque chose certainement..

    Merci d'avance de votre aide...

  2. #2
    Membre éclairé Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 612
    Points : 685
    Points
    685
    Par défaut
    T'aurais pas des fois un conflit avec System.EventHandler ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 153
    Points : 76
    Points
    76
    Par défaut
    hmmm non, enfin je sais pas exactement ce que ca veut dire ça, mais la seule chose que j'ai constaté est que "Loaded" est toujours null même quand il y a bien une modification sur les élément de la liste de UC1 (suppression/nouvelle creation)...

  4. #4
    Membre éclairé Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 612
    Points : 685
    Points
    685
    Par défaut
    C'est quoi "Loaded"?
    Tu déclares
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    delegate void EventHandler(object sender, SampleEventArgs e);
    EventHandler existe déjà dans System
    Essaie de le renommer ModifEventHandler p.ex.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 153
    Points : 76
    Points
    76
    Par défaut
    même après l'avoir renomé, toujours pas d'interaction, je pense que c'est plutôt il est pas branché correctement cet événement, car si je mets un point d'arrêt, là on s'abonne, il passe pas dedans..

  6. #6
    Membre éclairé Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 612
    Points : 685
    Points
    685
    Par défaut
    Montre un peu le code où tu t'abonnes...

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 153
    Points : 76
    Points
    76
    Par défaut
    ce code est dans le user control parent (qui contient les 2 UC UC1 et UC2)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public partial class UCParent : DevExpress.XtraEditors.XtraUserControl
        {
            public UC1()
            {
                InitializeComponent();
     
                UC1.Modified+= new Modified.ModifEventHandler(fonctionAExecuter);
            }
     
            private void fonctionAExecuter(object sender, UC1.SampleEventArgs e)
            {
                this.UC2.Reload();
            }

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 391
    Points : 347
    Points
    347
    Par défaut
    Bonjour

    Essaye deja que ta classe derive d'un classe System.EventArgs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     public delegate void EventHandler(object sender, SampleEventArgs e);
            public event EventHandler Modified;
     
            public class SampleEventArgs:System.EventArgs
            {
                public SampleEventArgs(string s) { Text = s; }
                public String Text { get; private set; } // readonly
            }
    Cordialement

  9. #9
    Membre éclairé Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 612
    Points : 685
    Points
    685
    Par défaut
    Citation Envoyé par sasseur Voir le message
    ce code est dans le user control parent (qui contient les 2 UC UC1 et UC2)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public partial class UCParent : DevExpress.XtraEditors.XtraUserControl
        {
            public UC1()
            {
                InitializeComponent();
     
                UC1.Modified+= new Modified.ModifEventHandler(fonctionAExecuter);
            }
     
            private void fonctionAExecuter(object sender, UC1.SampleEventArgs e)
            {
                this.UC2.Reload();
            }
    Attends, c'est un peu n'importe quoi...
    La class s'appelle UCParent et le constructeur UC1 ????????
    La définition du delegate contient deux paramètres et ton abonnement n'en passe qu'un ?????
    [Edit] là je me suis mélangé les pinceaux... oublie

    A mon avis il y a un gros problème de structure dans ton programme.
    Tu devrait avoir
    - un UC qui contient les deux autre.
    - trois class bien différentes pour les trois UC
    - dans l'UC principal tu ajoute tes deux UC secondaires (via le concepteur de vues)
    - dans l'UC principal tu t'abonnes à l'event de l'UC1 en respectant les paramètres du délégate...

    [Edit]
    Un truc du genre...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    public partial class UCParent : DevExpress.XtraEditors.XtraUserControl
      {
        public UCParent()
        {
          InitializeComponent(); //dans lequel est ajouté myUC1 et myUC2
     
          myUC1.Modified += new Modified.ModifEventHandler(fonctionAExecuter);
        }
     
        private void fonctionAExecuter(object sender, SampleEventArgs e)
        {
          this.myUC2.Reload();
        }
      }
     
      public partial class UC1
      {
        public delegate void ModifEventHandler(object sender, SampleEventArgs e);
        public event ModifEventHandler Modified;
     
        public UC1()
        {
          InitializeComponent();
        }
     
        private OnModified
        {
          if (Modified != null)
          {
            Modified(//+ paramètres)
          }
        }
      }
     
      public partial class UC2
      {
        public UC2()
        {
          InitializeComponent();
        }
     
        public void Reload()
        {
          //tralala pouet pouet !
        }
      }
     
      public class SampleEventArgs
      {
        public SampleEventArgs(string s) { Text = s; }
        public String Text { get; private set; } // readonly
      }

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 153
    Points : 76
    Points
    76
    Par défaut
    Je te remercie beaucoup pour ton aide!! en faite le problème était que je tapais pas sur le bon UC parent, comme j'avais crée un pour tester (que j'avais abondonné qui n'etait plus utilisé).. mais ton dernier post explique bien l'enchainement tout de même, donc ça servira certainement pour d'autre personne.

    Merci encore

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

Discussions similaires

  1. WPF - Interaction entre 2 userControl
    Par peruvio dans le forum C#
    Réponses: 1
    Dernier message: 24/01/2014, 11h05
  2. interaction entre plusieur script python par le biai d'internet
    Par yggdrazil dans le forum Réseau/Web
    Réponses: 5
    Dernier message: 01/11/2006, 14h36
  3. [VB .Net][Forms] Interaction entre deux forms
    Par plasticgoat dans le forum Windows Forms
    Réponses: 7
    Dernier message: 24/08/2005, 13h14
  4. [Collaboration/Interaction] Peut-on schématiser une interaction entre un bouton de commande et un autre objet ?
    Par manel007 dans le forum Autres Diagrammes
    Réponses: 5
    Dernier message: 21/09/2004, 01h01
  5. Réponses: 5
    Dernier message: 25/03/2003, 19h43

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