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

Dotnet Discussion :

Desabonnement aux evenements


Sujet :

Dotnet

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 11
    Par défaut Desabonnement aux evenements
    Bonjour

    J'ai une petite question sur les evenements. J'ai un control pour lequel je m'abonne à l'evenement MouseMove. J'ai donc fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m_MyControle.MouseMove+=MyMouseFct
    Pour me desabonner, je doit normalement faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m_MyControle.MouseMove-=MyMouseFct
    Est-ce qu'il est possible d'effacer la liste des abonner à MouseMove sans connaitre à priori la liste des abonner? C'est a dire, si je ne connais pas quels fonctions sont abonné à MouseMove, est-ce que je peut quand même les désabonné? Et si oui, comment?

    J'espère que vous avez compris ma question et que vous pourrez m'eclairer.
    Merci
    Pierre

  2. #2
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Par défaut
    Salut .

    il te suffit de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Delegate[] delegates = m_MyControle.MouseMove.GetInvocationList();
                        for (int i = 0; i < delegates.Length; i++)
                        {
                            m_MyControle.MouseMove -= (EventHandler)delegates[i];
                        }
    Avec ça tu :
    - récupères la liste des délégué connectés à ton evènement
    - te désabonnes de tout les délégués

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 11
    Par défaut
    Merci pour ta réponse.
    J'ai une erreur quand je veut récupérer la liste des abonnés. il me dit:
    L'événement 'System.Windows.Forms.Control.MouseMove' ne peut apparaître qu'à gauche de*+= ou*-=
    Est-ce que tu as une solution a cela?

    Merci d'avance

    Pierre

  4. #4
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut Question de design
    J'ai vu ton problème, je me pose juste une question du point de vue du design de l'application : il me semble étrange de vouloir effacer tous les abonnés à un événement. Ne devrais-tu pas plutot laisser les objets qui sont abonnés gérer eux-même leur abonnement ?
    C'est une question ouverte, pas une critique...
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 11
    Par défaut
    Merci de t'interesser à la question.
    Je te donne plus de détail. Peut-être y a-t-il effectivement une meilleur facon de faire.
    Je réalise une application graphique. J'ai donc une zone graphique dans laquelle je peux afficher un certain nombre d'objets. Chaque objet réagit différement à la souris. Quand j'ajoute un objet, j'abonne cet objet aux evenements de la zone graphique pour qu'il récupère les mouvements de la souris. Parfois, cependant, j'ai un objet qui doit récupérer tous les mouvements de la souris sans que les autres objets ne réagissent. Cet objet doit donc être capable de désabonner les autres objets sans les connaitre.

    En fait, j'ai résolu mon probleme d'une autre facon. J'ai créé un gestionnaire de souris. Quand j'abonne un objet, celui-ci mémorise cet objet dans une liste. Quand je veux tous déabonner, je parcoure la liste et je desabonne chaque objet. C'est un peu la grosse artillerie, mais ca marche.

  6. #6
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Une fois ce traitement particulier effectué, il faut aussi que tu réabonnes les objets aux événements, ou bien une fois les objets désabonnés, ils ne doivent plus être réabonnés ?
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/01/2019, 18h00
  2. Réponses: 4
    Dernier message: 28/08/2013, 12h19
  3. Une animation flash répondant aux evenement du visiteur
    Par simotaqi dans le forum Intégration
    Réponses: 0
    Dernier message: 18/02/2010, 10h04
  4. [C#] acceder aux evenements d'une autre fenetre
    Par drayif dans le forum Windows Forms
    Réponses: 4
    Dernier message: 17/07/2007, 13h35
  5. Evenements associés aux elements d'une JLIST.
    Par gregb34 dans le forum Composants
    Réponses: 1
    Dernier message: 03/05/2006, 01h21

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