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 :

evenement sur un variable


Sujet :

Windows Forms

  1. #1
    Membre émérite
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Points : 2 424
    Points
    2 424
    Par défaut evenement sur un variable
    bonjour tt le monde,

    voila je vt savoir comment on peut fait un evenement de tel sorte que

    ce variable declenche un evenement quand sa valeur se change


    exemple
    variable a

    a=5 ---------------------------------->a=8
    declenchement d'un evenement

  2. #2
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Public Event OnMachinChanged As EventHandler
     
    Private pmachin As Integer = 0
     
    Public Property Machin() As Integer
        Get
            Return pmachin
        End Get
        Set(ByVal value As Integer)
            pmachin = value
            RaiseEvent OnMachinChanged(Me, EventArgs.Empty)
        End Set
    End Property
    Tu utilises donc Machin et tu t'abonnes à l'évènement OnMachinChanged ...

  3. #3
    Membre émérite
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Points : 2 424
    Points
    2 424
    Par défaut
    comment j'excute le procedure dû au declanchement de l'evenement

    un exemple peut faire l'affaire


    et merci,

  4. #4
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    ça doit être un truc genre ça :
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Public Sub OnMachinChangedHandler(ByVal sender As Object, ByVal e As EventArgs) Handles OnMachinChanged
      ...
    End Sub
    par contre, tu devrais lire ceci :
    http://plasserre.developpez.com/cours/vb-net/

  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 : 42
    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 749
    Points
    39 749
    Par défaut
    +1 pour la suggestion de Smyley...

    J'ai juste une petite remarque sur les conventions de nommage : normalement le nom de l'évènement ne prend pas de préfixe On, donc l'évènement devrait s'appeler MachinChanged et non OnMachinChanged. OnMachinChanged, typiquement, sera le nom d'une méthode protégée pour déclencher l'évènement (qui n'est pas vraiment nécessaire en VB.NET vu que Raise vérifie que le handler n'est pas null)

  6. #6
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 150
    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 150
    Points : 25 066
    Points
    25 066
    Par défaut
    désolé de squater

    je suis pas sur d'avoir compris comment marche les évènements en c#, est-ce que ca revient au meme qu'en vb.net quand meme ?

    un handler est il managé ou non ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  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 : 42
    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 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    je suis pas sur d'avoir compris comment marche les évènements en c#, est-ce que ca revient au meme qu'en vb.net quand meme ?
    Grosso modo, oui. Mais VB.NET a l'instruction Raise, qui n'existe pas en C#, et qui vérifie si des handlers sont abonnés à l'évènement avant d'essayer de les appeler. En C#, il faut faire cette vérification soi-même, donc pour un évènement MachinChanged, on écrira souvent une méthode comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    protected void OnMachinChanged()
    {
        var handler = MachinChanged;
        if (handler != null)
            handler(this, EventArgs.Empty)
    }
    qu'on appelle à la place de Raise

    Pour l'explication de la variable handler intermédiaire : c'est pour parer le cas (improbable) où MachinChanged deviendrait null entre le test et l'appel. Eric Lippert a publié un billet sur son blog où ce problème est décrit de façon plus approfondie...

    Citation Envoyé par Pol63 Voir le message
    un handler est il managé ou non ?
    Qu'est-ce que tu entends par là ?
    Si tu veux dire "géré par le garbage collector", comme tous les objets .NET, oui, bien sûr, il est managé

  8. #8
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 150
    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 150
    Points : 25 066
    Points
    25 066
    Par défaut
    dans le framework, les handlers sont retirés dans le dispose dans la partie où meme appelé depuis le finalize c'est fait, donc partie réservées au choses non managée ...

    alors que le peu que j'ai pu en voir dans reflector les event c'est une collection de délégués pour chaque évènement ...

    serait-ce pour etre sur de vider ses collections de choses inutiles ?? étrange ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  9. #9
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Pour la convention de nommage c'est tout à fait ça (sauf que dans la précipitation d'écrire du code C# et de le convertir en ligne, j'ai pas fait attention ).

    Pour la dernière question, je vois pas où tu veux en venir (Pol ou sperot ? ). En tout cal les events restent attachés même dans les finalizers mais on n'a pas à les libérer soit même. Après si j'ai bien compris les évènements sont des références faibles et pas fortes donc avoir une référence via un évènement ne compte pas dans les cycles du GC ...

  10. #10
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 150
    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 150
    Points : 25 066
    Points
    25 066
    Par défaut
    je me demande surtout si on est obligé de mettre quelquepart un removehandler pour chaque addhandler qui est passé

    en vb.net (je sais pas si ca y est en c#) on peut déclarer des variables en rajoutant le mot-clé WithEvents
    ca permet de pouvoir écrire derrière une sub Handles Instance.Event
    le compilateur pour ce genre de chose s'occupe de faire le addhandler, mais aussi le removehandler
    (-- 2 minutes plus tard en ayant utilisé quelques neurones--)
    ca doit etre pour ne pas handler plusieurs instances à la fois que ca compile de cette manière ...

    si à ca on rajoute le fait que des removehandler dans les dispose j'arrive pas à en retrouver dans reflector ca veut dire que les remove seraient facultatifs ...


    (Pol ou sperot ? )
    c'est troublant ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  11. #11
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Oui on doit s'abonner aux évènements mais on es pas obligé de supprimer l'abonnement. En C# c'est += et -= pour les évènements.
    Le WithEvents du vb j'ai pas compris à quoi ça sert (mais entre nous ça ne me dérange pas ) mais en C# pour rajouter un évènement c'est systématiquement Machin += new EventHandler(...).

  12. #12
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 150
    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 150
    Points : 25 066
    Points
    25 066
    Par défaut
    en vb.net on a encore un truc de fénéant


    au lieu de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    private _btn as new button
     
    public sub new
      addhandler _btn.click, btnclick
    end sub
     
    private sub btnclick
    end sub
    on peut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private withevents _btn as new button
     
    private sub btnclick Handles _btn.click
    end sub
    à la compilation le withevents transforme la variable en propriété et dans le set ca fait removehandler si value is nothing puis le addhandler

    en plus en vb, on peut retirer sender et e ca rale pas ... (par contre on peut pas les utiliser du coup )
    bon par contre ca empeche quand meme d'écrire des conneries genre de mettre que sender, ou e pas du bon type


    tous les controles sont déclarés dans le fichier designer avec withevents
    et je trouve ca plutot pratique, sur une sub on sait directement pas qui elle sera appelée
    (on peut meme avoir des handles multiples genre Handles btn1.click, btn2.click, textbox1.textchanged)


    j'aurais bien pourri le post d'origine !!
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

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

Discussions similaires

  1. [XSLT] Faire une boucle sur une variable [i]
    Par PoT_de_NuTeLLa dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/06/2010, 13h45
  2. Evenement sur changement d0une valeur d'une variable
    Par Destiny dans le forum Windows Forms
    Réponses: 2
    Dernier message: 09/04/2008, 10h28
  3. [FLASH MX 2004] [ecouteur] evenements sur un clip
    Par marco_ dans le forum Flash
    Réponses: 2
    Dernier message: 30/04/2004, 14h28
  4. question sur les variables globales et les thread posix
    Par souris_sonic dans le forum POSIX
    Réponses: 5
    Dernier message: 13/06/2003, 14h59
  5. Réponses: 4
    Dernier message: 15/12/2002, 05h19

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