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

VB.NET Discussion :

Question sur 'Handles'


Sujet :

VB.NET

  1. #1
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut Question sur 'Handles'
    Bonjour,

    Je ne comprend pas trop pourquoi je ne peux pas faire ça:
    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
     
    Public Class DraggablePanel
        Inherits Windows.Forms.UserControl
     
        Public WithEvents DockProperty As DockProperty
     
        'Mouse_Down
        Public Sub Grip_Down(ByVal sender As Object, ByVal e As Windows.Forms.MouseEventArgs) Handles DockProperty.Grip.MouseDown '<-- Ecriture fausse..
     
        End Sub
     
    End Class
     
    Public Class DockProperty
     
        Public WithEvents Area As Windows.Forms.Panel
        Public WithEvents Grip As Windows.Forms.Panel
        Public WithEvents Component As Windows.Forms.Panel
     
    End Class
    Ca me marque:
    Dans les classes, 'Handles' doit spécifier une variable 'WithEvents', ou 'MyBase', 'MyClass' ou 'Me' par un identificateur unique.
    Je ne pense pouvoir mettre plus de 'WithEvents'...

    Merci de votre aide

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 196
    Par défaut
    C'est quoi un dockproperty?

  3. #3
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut
    Citation Envoyé par BenoitM Voir le message
    C'est quoi un dockproperty?
    C'est à moi C'est la dernière classe du code.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 196
    Par défaut
    Ah oui pas vu


    Je pense que tu dois faire dans le formload AddHandler DockProperty.Grip.MouseDown.Event1, AddressOf Me.Grip_Down

  5. #5
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut
    Oui ça ça marche, mais pourquoi est ce que je ne peux pas directement le mettre dans la déclaration de la méthode?

  6. #6
    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 : 44
    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 -N4w4k- Voir le message
    Oui ça ça marche, mais pourquoi est ce que je ne peux pas directement le mettre dans la déclaration de la méthode?
    Par ce que l'évènement est pas directement sur l'objet DockProperty, il est sur une propriété de DockProperty. Ce cas n'est pas supporté par le langage

    De toutes façons je déconseille fortement l'utilisation de la clause Handles ; avec ce truc, est-ce que tu es capable de dire à quel moment le handler est ajouté à l'évènement ? Et qu'est-ce qui se passe si du code externe change la valeur de DockProperty (vu que tu l'as déclaré Public) ? Est-ce que la méthode va gérer l'évènement sur le nouvel objet ou l'ancien ? Au moins quand tu fais ça manuellement avec AddHandler, il n'y a aucune ambiguïté...

  7. #7
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Oui ça ça marche, mais pourquoi est ce que je ne peux pas directement le mettre dans la déclaration de la méthode?
    Par ce que l'évènement est pas directement sur l'objet DockProperty, il est sur une propriété de DockProperty.
    Ok je comprends. Je n'avais pas vu l’ambiguïté qu'il pouvait y avoir..

    Merci pour l'explication.

  8. #8
    Membre Expert Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Par défaut
    @N4w4k
    Pour vraiment comprendre pourquoi le compilateur ne peut pas faire ce que tu lui demandes, il faut comprendre comment fonctionnent WithEvents et Handles.

    Le compilateur va en fait remplacer toutes les assignations à un champ WithEvents par une méthode (setter) qui va désabonner l'ancienne valeur de ce champ (si différent de nothing), assigner la nouvelle valeur au champ, puis abonner la nouvelle valeur (si différente de nothing).

    Or, ceci ne peut pas fonctionner pour les champs de DockProperty : en effet, une instance de DockProperty n'a aucun moyen de savoir qui détient une référence vers elle-même. Donc son setter ne pourrait pas abonner ses détenteurs à un de ses champs.

    Note au passage que si ton objet est manipulé par plusieurs threads tu peux avoir des problèmes si deux setters opèrent de façon concurrente. En effet l'implémentation par le compilateur n'est pas thread safe et tu pourrais par exemple te retrouver avec une nouvelle valeur qui ne serait pas abonnée, ou une ancienne valeur non-désabonnée.

  9. #9
    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 : 44
    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 DonQuiche Voir le message
    Le compilateur va en fait remplacer toutes les assignations à un champ WithEvents par une méthode (setter) qui va désabonner l'ancienne valeur de ce champ (si différent de nothing), assigner la nouvelle valeur au champ, puis abonner la nouvelle valeur (si différente de nothing).
    Le truc, c'est qu'un "champ" WithEvents est en fait une propriété... je ne suis pas sûr que ce soit mentionné explicitement où que ce soit dans la doc (en tous cas j'ai pas trouvé). Je trouve ça un peu hallucinant d'ailleurs : tu déclares un champ, et en collant dessus un modificateur, ça devient une propriété alors qu'on ne s'y attend pas du tout. Décidément je déteste ce langage

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

Discussions similaires

  1. Question sur le handle
    Par SteelBox dans le forum C++Builder
    Réponses: 4
    Dernier message: 04/08/2003, 17h07
  2. Quelques questions sur le TWebBrowser...
    Par CorO dans le forum Web & réseau
    Réponses: 3
    Dernier message: 17/01/2003, 21h23
  3. Question sur les handles et les couleurs...
    Par MrDuChnok dans le forum C++Builder
    Réponses: 7
    Dernier message: 29/10/2002, 08h45
  4. Réponses: 2
    Dernier message: 11/08/2002, 21h27
  5. question sur les message box !
    Par krown dans le forum Langage
    Réponses: 7
    Dernier message: 02/08/2002, 16h11

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