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

 .NET Discussion :

paramètres d'un évènement


Sujet :

.NET

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    958
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 958
    Points : 141
    Points
    141
    Par défaut paramètres d'un évènement
    Bonjour,

    Voici l' exemple de lévènement documentAddingtoQueue qui est déclenché dans la fonction OnDocumentAddingtoQueue mais dont les paramètres ne sont pas pour le premier de type object(sender) et le second de type event
    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
     
     
    public event DocumentAddingToQueueDelegate<DocumentType> DocumentAddingToQueue = null;
     
     
     
    protected bool OnDocumentAddingToQueue(DocumentType document)
            {
                if (DocumentAddingToQueue != null)
                {
                    //si l'évènement DocumentAddingToQueue n'est pas null, c'est à dire s'il est associé à des méthodes qui s'exécuteront s'il est appelé, alors appeler(invoquer ou lancer) cet évènement
                    //question : pourquoi n'y a t-il pas deux arguments lors du déclenchement de cet evènement : un pour le sender et l'autre de type Event?
                    return DocumentAddingToQueue(document);
                }
                else
                {
                    return true;
                }
            }
    Par ailleurs, le délégué DocumentAddingToQueueDelegate est défini dans une autre classe ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    public delegate bool DocumentAddingToQueueDelegate<DocumentType>(DocumentType document);
    Normalement, lors de l'appel d'un evènement, on doit trouver deux paramètres pour cet evènement: un de type object et un autre de type event.

    pourquoi n'est ce pas le cas lors de l'appel de l'évènement DocumentAddingtoQueue ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DocumentAddingToQueue(document);
    Merci beaucoup de votre aide sur ce point.

    Cordialement.

    curieuse_prog
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. [SHADOKS]

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 674
    Points : 5 259
    Points
    5 259
    Par défaut
    J'avoue que j'y fait plus trop attention car la plupart de mes délégués ne sont pas voués à devenir des évenements mais si je ne dis pas une grosse connerie
    l'évènement prendra forcément la même signature que le delegué qui lui est associé.

    Si tu veux que ton évenement contienne un sender, il faut que le delegué contienne un sender.

    Exemple dans le system.Windows.Forms
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public delegate void KeyPressEventHandler(object sender, KeyPressEventArgs e);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public event KeyPressEventHandler KeyPress;
    Après je n'y ai jamais réfléchi mais je suppose qu'il y a une mécanique interne qui affecte le sender de manière automatique.

    Essaie déjà de changer le delegué pour un ajouter un sender de type Object et regarde ce qui se passe.

  3. #3
    Expert confirmé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 065
    Points : 4 229
    Points
    4 229
    Par défaut
    Par défaut c'est EventHandler qui est utilisé et si tu fais F12 dessus tu verras que c'est un délégué qui prend 2 paramètres (object sender,eventargs e).
    Ton événement respectera la signature défini dans ton délégué.
    Et pour le sender je pense pas qu'il soit défini automatiquement mais je pense qu'il est défini manuellement à chaque appel de l'événement.

    Si tu veux que la signature de ton événement ressemble à celui de EventHandler tu peux au choix crée un délégué avec une signature similaire ou créer une classe qui hérite d'eventArgs et déclaré un événement comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            public event EventHandler<TypeOfMyclass> Evenement;
    Tu as un exemple ici:
    http://fguillot.developpez.com/cours...s-csharp/#LV-F

    Tu as d'autre tuto qui traite du sujet sur developpez.com

Discussions similaires

  1. créer un événement paramétrable
    Par gmanouvrier dans le forum Windows Forms
    Réponses: 2
    Dernier message: 13/11/2007, 10h47
  2. Passer un événement en paramètre de fonction
    Par zoubidaman dans le forum C#
    Réponses: 6
    Dernier message: 17/10/2007, 16h56
  3. Passage de paramètre sur un événement
    Par GPZ{^_^} dans le forum Flash
    Réponses: 5
    Dernier message: 14/05/2007, 12h51
  4. Réponses: 5
    Dernier message: 16/02/2007, 13h58
  5. Réponses: 3
    Dernier message: 14/01/2007, 17h30

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