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

Windows Forms Discussion :

notion de sender et d'evènement


Sujet :

Windows Forms

  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 notion de sender et d'evènement
    Bonjour,
    Sopit la procedure suivante


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    End Sub

    J'aimerais savoir clairement quel est l'instance e qui est créée quand un utilisateur clique sur le bouton button1
    En effet, avec le débogueur je vois que cet arguement e ne contient rien( il est ecrit "empty");
    que cela signifie -t-il qu'il ne contient rien??
    qu'il n'y a aucun evènement créé??

    J'avoue que tout cela est encore flou.

    J'aimerais également comprendre ce qu'est sender
    La définition que je trouve est la suivante :

    'Sender' contient le nom de l'objet qui a déclenché l'évènement(c'est un objet)

    Que signifie 'objet qui a déclenché l'évènement'?
    Est-ce le nom de l'objet sur lequel a eu lieu l'evènement click, autrement dit, l'objet "recepteur" de l'evènement click, c'est à dire le bouton button 1 ou est ce le formulaire sur lequel se trouve le bouton "button1"??

    Dernière question:

    J'ai crée une form appelée thesaurus_form.
    A sa création j'ai indiqué que cette form hérite de la classe Form(public class thesaurus_form inherits System.....Forms.Form
    dans le code "region" ,lorsque je vois ecris MyBase.New()

    A quoi correspond MyBase exactement??? : à la classe de base qui est la
    MyBase : à la classe de base qui est la classe Form ou à la classe thesaurus_forms???

    A la création de la classe thesaurus_forms, j'ai crée une procedure thesaurus_forms_load et je vois écris dans le HANDLES MyBase.Load: pouvez vous m'expliquer le sens de ce MyBase.Load??

    Merci beaucoup de votre aide assez urgente.

    Cordialement.

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

  2. #2
    Expert éminent sénior

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Points : 12 465
    Points
    12 465
    Par défaut
    Salut,

    En effet, avec le débogueur je vois que cet arguement e ne contient rien( il est ecrit "empty");
    En fait, cela va dependre de comment tu declenches ton evenement.
    Par exemple, si tu est sur un bouton, que tu clicques dessus, tu devrais avoir les parametres de ton click (je ne les ai plus en tete, mais ca va etre des coordonnees, des choses comme ca...), alors que si tu as fait enter, tu n'auras rien (si je me rappelle bien)

    Que signifie 'objet qui a déclenché l'évènement'?
    Est-ce le nom de l'objet sur lequel a eu lieu l'evènement click, autrement dit, l'objet "recepteur" de l'evènement click, c'est à dire le bouton button 1 ou est ce le formulaire sur lequel se trouve le bouton "button1"??
    Dans le cas d'un click sur ton bouton, le sender sera ton bouton 1, mais tu peux assigner la fonction Button1_Click a Button1, Button2, ou Button3...donc, le sender te permets de savoir quel controle a declenche l'evenement.


    MyBase est equivalent a super dans d'autres langages orientes objet, si tu fais MyBase.New, cela va appeler le New du parent. Inversement, si tu dis que ta fonction handles MyBase.Load, cela veut dire que lorsque l'evenement Load de ta classe thesaurus_forms sera appele, ta fonction thesaurus_forms_load sera appelee, au lieu de la fonction Load du parent...

    Pour plus d'infos sur les evenements:
    http://msdn.microsoft.com/fr-fr/vbasic/bb896006.aspx

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  3. #3
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    me référence l'instance dans laquelle s'execute le code actuelle
    mybase référence le niveau d'en dessous au niveau héritage

    s'il n'y a pas de redéfinition des membres, me et mybase pointent sur le meme membre ...


    pour les évènements microsoft a voulu qu'ils aient tous la meme définition, à savoir sender as object et e as system.Eventargs

    sender comme l'explique pvialatte contient l'instance qui déclenche l'évènement
    vu qu'il est possible de gérer un evenement de plusieurs instances sur la meme sub, ca permet de savoir lequel appelle l'event

    exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    private _b1 as button
    private _b2 as button
    private _b3 as button
     
    private sub btn_click(sender as object, e as system.eventargs) handles _b1.click, _b2.click, _b3.click
        if sender is _b1 then
            dim b as button = directcast(sender,button)
            'ici b est le meme objet que _b1
            'directcast permet de gérer l'intellisense
        end if
    end sub
    il est aussi possible d'ajouter de l'évènementiel par code avec addhandler
    il est aussi possible de tester le type de sender avant de faire le directcast
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if typeof sender is button then
    si tu as des boutons qui sont instanciés à la volée, tu n'as pas forcément gardé de référence dessus, donc tu peux tester le nom
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    dim b as button = directcast(sender,button)
    select case b.name
        '
    end select

    e contient les paramètres de l'évènements
    avant (sur vb6) il n'y avait pas de sender je crois, et les paramètres étant différents d'un event à l'autre
    exemple ancien : event (param1 as string, param2 as integer)

    maintenant les paramètres sont ajoutés dans une classe spéciale, dérivée de system.EventArgs
    la classe de base system.EventArgs sert donc à dire qu'il n'y a aucun paramètre (je sais ca parrait con mais bon ^^)
    la classe system.windows.forms.mouseeventargs dérive donc de eventargs et expose des paramètres en plus (le bouton, x, y etc...)



    bref ca harmonise et ca range ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    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 Quelques precisions à propos de l'evènement load
    Bonsoir et merci beaucoup de toutes vos réponses.

    Lorsque pvialatte dit ceci
    Inversement, si tu dis que ta fonction handles MyBase.Load, cela veut dire que lorsque l'evenement Load de ta classe thesaurus_forms sera appele, ta fonction thesaurus_forms_load sera appelee, au lieu de la fonction Load du parent...

    Quelle est la fonction load du parent : qui est le parent ici? c'est cela que je ne comprends pas bien??

    Pourquoi dis tu que ce sera la fonction thesaurus_form_load qui sera appellée au lieu de la fonction Load du parent alors que c'est bien écrit Handles MyBase.Load??, ce qui signifie, si j'ai bien comris que c'est le chargement du parent( mais qu'est le parent : une instance de la classe Form ?? et si oui laquelle??) qui provoquera l'execution de la procedure Thesaurus_form_load

    Merci encore beaucoup de vos eclaircissements!

    Cordialement.

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

  5. #5
    Expert éminent sénior

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Points : 12 465
    Points
    12 465
    Par défaut
    attention, je suis rouillé en VB, et encore plus en Winform...

    ta forme thesaurus_forms hérite de la classe Form du framework.
    Cette classe Form possede un evenement Load, declenche a l'ouverture de la form (enfin, je pense), et tu definis l'action qui sera effectuee lorsque cet evenement est lance par ta forme...je sais pas si je suis clair

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  6. #6
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    l'exemple n'est pas flagrant sur un evenement, je ne vois pas en quoi on peut overrider un evenement et/ou à quoi ca sert

    par contre sur une méthode c'est plus simple à expliquer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    public class A
     
      public overridable sub aff()
         msgbox ("A")
      end sub
     
    end class
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public class B
      inherits A
     
      public overrides sub aff()
        msgbox ("B")
      end sub
     
    end class
    quand tu est sur b, me.aff affichera "B" alors que mybase.aff affichera "A"


    une instance de B "fusionne" les membres (membre = variables + sub + function + event ...) de A et de B mais dans le cas de la surcharge, il garde les 2 méthodes quand meme, et selon tu fais me ou mybase il execute l'une ou l'autre


    mais comme je disais overrider un evenement ca n'a pas de sens

    donc handles mybase.load ou me.load ca fait la meme chose vu la fusion de la classe Form et de ta form (Form1 par exemple) fait que l'évenement est unique
    toutes les forms que tu créés hérite de la classe form
    l'évènement load tu ne l'as pas déclaré, il est déclaré sur la classe form
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. Notion de boucles dans Business Object
    Par lionelEIGIP dans le forum Deski
    Réponses: 1
    Dernier message: 08/04/2004, 11h26
  2. Notion sur Socket UDP
    Par oxor3 dans le forum Développement
    Réponses: 3
    Dernier message: 05/04/2004, 00h19
  3. Evènement sur clic droit !?
    Par soccersoft dans le forum Composants VCL
    Réponses: 6
    Dernier message: 26/12/2002, 21h39
  4. Notion d'algorithme
    Par gtr dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 10/12/2002, 11h46
  5. Un Sender peut-il s'auto-détruire lors d'un onClick?
    Par Flo. dans le forum C++Builder
    Réponses: 2
    Dernier message: 17/07/2002, 10h31

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