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 :

Supprimer un Event Handler


Sujet :

C#

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2009
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 172
    Par défaut Supprimer un Event Handler
    Bonjour à tous,
    J'ai dans on application une image qui en fonction des choix de l'utilisateur ne doit pas renvoyer vers la meme fonction.
    Ma question est alors simple, comment faire pour supprimer la fonction associé à l'élément click de mon image ?

    On pourrait utiliser -= mais je ne connais pas la précédente fonction. Enfin dans la théorie je pourrais la connaitre, mais j'ai pour but de mettre plusieurs images de ce type alors ça deviendrait assez vite lourd comme code si je devais stocker dans une variable la dernière fois que l'utilisateur a cliqué, etc.

    N'y a-t-il tout simplement pas un truc pour dire .click.Clear (je sais que ça n'existe pas je cherche un truc dans le meme genre) pour tout enlever ?

    Merci d'avance, r0seBa

  2. #2
    Membre confirmé Avatar de istace.emmanuel
    Homme Profil pro
    Senior Full-Stack .Net Developer
    Inscrit en
    Août 2009
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Senior Full-Stack .Net Developer
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2009
    Messages : 125
    Par défaut
    Le plus simple je pense est de garder un handler en "dur"
    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
        public partial class MainWindow : Window
        {
            RoutedEventHandler h;
     
            public MainWindow()
            {
                InitializeComponent();
                this.h = new RoutedEventHandler(First);
                this.img.Click += this.h;
            }
     
            private void First(object sender, RoutedEventArgs e)
            {
                MessageBox.Show("Click first ! ");
            }
     
            private void Second(object sender, RoutedEventArgs e)
            {
                MessageBox.Show("Click second ! ");
            }
     
            private void ChangeHandler(object sender, RoutedEventArgs e)
            {
                this.img.Click -= this.h;
                h = new RoutedEventHandler(Second);
                this.img.Click += this.h;
            }
        }
    Sinon tu as toujours les delegate, tu garde un handler sur ton Click et tu change ensuite seulement la méthode associé a ton delegate
    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
        public partial class MainWindow : Window
        {
            private delegate void OnClickDisplayMessage();
            private OnClickDisplayMessage MyDelegate;
     
            public MainWindow()
            {
                InitializeComponent();
     
                MyDelegate = new OnClickDisplayMessage(First);
                this.img.Click += new RoutedEventHandler(img_Click);
            }
     
            void img_Click(object sender, RoutedEventArgs e)
            {
                MyDelegate();
            }
     
            private void First()
            {
                MessageBox.Show("Click first ! ");
            }
     
            private void Second()
            {
                MessageBox.Show("Click second ! ");
            }
     
            private void ChangeHandler(object sender, RoutedEventArgs e)
            {
                MyDelegate = new OnClickDisplayMessage(Second);
            }
        }
    Il me semble que ce sont les principales méthodes...

  3. #3
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    salut

    si l'evenement t'appartient, tu dois pouvoir faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Click.GetInvocationList().Initialize();
    Pas testé

  4. #4
    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 : 43
    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
    Par défaut
    Citation Envoyé par theMonz31 Voir le message
    si l'evenement t'appartient, tu dois pouvoir faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Click.GetInvocationList().Initialize();
    Bah non... ça va juste mettre à null tous les éléments du tableau renvoyé par GetInvocationList(), qui de toutes façons n'est qu'une copie de la "vraie" liste des handlers. Par contre si l'évènement t'appartient, tu peux faire ça :

  5. #5
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    autant pour moi

    N'ayant pas accès à mon compilo favori, j'essayais une piste

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2009
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 172
    Par défaut
    Bonjour,
    Merci pour vos réponses.
    Je trouvais l'idée des delegate assez simple à mettre en place, ou du moins assez pratique dans le futur.

    Mais faire click=null revient exactement au meme que de faire -= ?
    Dans ce cas là je pense opter pour cette méthode.

    Merci

  7. #7
    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 : 43
    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
    Par défaut
    Citation Envoyé par r0seBa Voir le message
    Mais faire click=null revient exactement au meme que de faire -= ?
    Non. -= enlève un handler, Click = null les enlève tous

    Mais de toutes façons cette approche n'est utilisable que dans la classe où tu as déclaré l'évènement, pas dans le cas général

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 27/08/2007, 13h37
  2. event handler et accès anonyme
    Par @melie dans le forum SharePoint
    Réponses: 5
    Dernier message: 25/08/2007, 19h17
  3. Réponses: 1
    Dernier message: 15/08/2007, 15h45
  4. Birt Event Handler
    Par medbass dans le forum BIRT
    Réponses: 8
    Dernier message: 07/08/2006, 14h51
  5. Problème avec event handler
    Par MASSAKA dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 15/11/2005, 09h31

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