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 :

Ajout d'un évènement dans une classe


Sujet :

C#

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2009
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Ajout d'un évènement dans une classe
    Bonjour à tous,

    Mon problème est le suivant :

    J'ai créé une classe et j'aimerai que lorsque je créé une instance de cette classe, je puisse l'abonner à l'évènement Click ou MouseHover par exemple.

    En gros ce serait gérer les évènements de ma classe.

    Merci d'avance pour vos réponses

  2. #2
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Bonjour

    Cherche Event et Delegates !

    Il y a plein d'exemples partout !!

  3. #3
    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
    Points : 39 753
    Points
    39 753
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    leControle.Click += leControle_Click;
     
    // ...
     
     
    private void leControle_Click(object sender, EventArgs e)
    {
        // ...
    }

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2009
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Tomlev ce n'est pas l'abonnement à un évènement que je cherche à faire, mais créer l'évènement.

    Par exemple le MouseHover sur ma classe.

  5. #5
    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
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par marcaille Voir le message
    Tomlev ce n'est pas l'abonnement à un évènement que je cherche à faire, mais créer l'évènement.
    Faut dire que ta question était pas très claire ... :

    Citation Envoyé par marcaille Voir le message
    J'ai créé une classe et j'aimerai que lorsque je créé une instance de cette classe, je puisse l'abonner à l'évènement Click ou MouseHover par exemple.

    Ben c'est pas très compliqué. Il suffit de déclarer l'évènement dans ta classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public event EventHandler Click;
    Pour déclencher l'évènement, il suffit d'appeler Click en lui passant des paramètres (attention, Click vaut null si personne n'est abonné à l'évènement, donc il faut d'abord le vérifier) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (Click != null)
        Click(this, EventArgs.Empty);
    En général, pour ne pas avoir à écrire ça à chaque fois on crée une méthode OnClick qui se charge de déclencher l'évènement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    protected virtual void OnClick()
    {
        EventHandler handler = Click;
        if (handler != null)
            handler(this, EventArgs.Empty);
    }
    Note l'utilisation d'une variable intermédiaire, ce n'est pas "pour faire joli" mais pour éviter des problèmes en multithread (voir ce post pour plus d'explications)

    Pour le cas où ton évènement a des paramètres, il y a un peu plus de boulot... Supposons que tu veux écrire un évènement Toto avec des paramètres Foo et Bar. Il faut :

    - créer une classe héritée de EventArgs pour contenir les paramètres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class TotoEventArgs : EventArgs
    {
        public TotoEventArgs(string foo, int bar)
        {
            this.Foo = foo;
            this.Bar = bar;
        }
     
        public string Foo { get; private set; }
        public int Bar { get; private set; }
    }
    - déclarer un delegate pour ton évènement (pas obligatoire, tu peux aussi utiliser le delegate générique EventHandler<TotoEventArgs>) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public delegate void TotoEventHandler(object sender, TotoEventArgs e);
    - déclarer l'évènement dans ta classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public event TotoEventHandler Toto;
    - et la méthode pour déclencher l'évènement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    protected virtual void OnToto(string foo, int bar)
    {
        TotoEventHandler handler = Toto;
        if (handler != null)
            handler(this, new TotoEventArgs(foo, bar));
    }

    Par contre, y a un truc qui me chiffonne dans ton histoire : si tu veux créer des évènements Click et MouseHover, je suppose que ta classe est un contrôle, non ? Parce que dans ce cas tu n'as rien à faire, ces évènements existent déjà...

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2009
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Merci c'était ça que je recherchais
    Désolé en effet ma question n'étais pas forcément claire.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2009
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Non ce n'est pas encore un controle. D'ou l'ajout un EventArg.
    Après j'hésite en effet à le faire hériter d'un controle.

    J'ai une classe de base Média avec une classe Divx qui en hérite. Ce serait une classe à utiliser en wpf

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

Discussions similaires

  1. Intercepter un événement dans une classe
    Par al_bert dans le forum C#
    Réponses: 3
    Dernier message: 03/03/2010, 17h45
  2. Définir des événements dans une classe
    Par Masmeta dans le forum Windows Forms
    Réponses: 5
    Dernier message: 29/04/2008, 18h41
  3. Réponses: 3
    Dernier message: 09/04/2008, 18h45
  4. Ajout d'un objet dans une classe
    Par Zorgloub dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/01/2008, 12h16

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