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 Presentation Foundation Discussion :

UserControl + RoutedEvent


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Par défaut UserControl + RoutedEvent
    Bonjour,
    toujours avec mon UserControl Diary, je souhaite que l'application hôte de mon UserControl puisse être notifiée de la création d'un nouveau rendez-vous.
    Dans mon UserControl, j'ai donc créé un RoutedEvent comme suit :
    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
    15
    16
    17
    18
    19
     
        Public Shared AppointmentCreatedEvent As RoutedEvent = EventManager.RegisterRoutedEvent("AppointmentCreated", RoutingStrategy.Bubble, GetType(RoutedEventHandler), GetType(Diary))
        Public Custom Event AppointmentCreated As RoutedEventHandler
            AddHandler(ByVal value As RoutedEventHandler)
                Me.AddHandler(AppointmentCreatedEvent, value)
            End AddHandler
     
            RemoveHandler(ByVal value As RoutedEventHandler)
                Me.RemoveHandler(AppointmentCreatedEvent, value)
            End RemoveHandler
     
            RaiseEvent(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs)
                Me.RaiseEvent(e)
            End RaiseEvent
        End Event
        Private Sub RaiseAppointmentCreatedEvent()
            Dim NewEventArgs As New RoutedEventArgs(Diary.AppointmentCreatedEvent)
            MyBase.RaiseEvent(NewEventArgs)
        End Sub
    Puis, au moment où un nouveau rendez-vous est créé :
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.RaiseAppointmentCreatedEvent()
    Dans l'application de test, voici ce que j'ai écrit :
    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
    15
    16
    17
    18
     
    Public Class TestDiary
        Dim MyDiary As New Diary.Diary
     
        Private Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded
     
            Me.AddHandler(Diary.Diary.AppointmentCreatedEvent, New AppointmentCreated(AddressOf Appointment_Created))
     
        End Sub
     
        Private Delegate Sub AppointmentCreated(ByVal sender As Object, ByVal e As RoutedEventArgs)
     
        Private Sub Appointment_Created(ByVal sender As Object, ByVal e As RoutedEventArgs)
            'Pour tester :
            MessageBox.Show("Nouveau Rendez-vous créé !!!")
     
        End Sub
    End Class
    Mais la MessageBox n'apparaît jamais. Qu'est-ce que je fais de travers ?...

  2. #2
    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
    Je suis pas sûr que ce soit la cause du problème, mais pourquoi tu crées un type de delegate AppointmentCreated alors que l'évènement définit le handler comme un RoutedEventHandler ? A vrai dire je suis même étonné que ça compile...

    Sinon, tu as essayé de mettre des breakpoints pour vérifier que tu passes bien dans RaiseAppointmentCreatedEvent ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Par défaut
    La création du Delegate telle que je l'ai écrite est la manière de faire, en VB, que j'ai trouvée sur Internet... Sans Delegate, comme ceci :
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.AddHandler(Diary.Diary.AppointmentCreatedEvent, AddressOf Appointment_Created)
    (ce que j'avais écrit au départ), ça ne compile pas...
    Quant à la procédure RaiseAppointmentCreatedEvent, oui, elle est bien appelée.

  4. #4
    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 jacquesprogram Voir le message
    La création du Delegate telle que je l'ai écrite est la manière de faire, en VB, que j'ai trouvée sur Internet...
    Bah je sais pas ou t'as vu ça, mais c'est pas la bonne façon... Il est fréquent de déclarer un Delegate quand on crée un évènement, mais dans ce cas c'est la classe qui déclare l'évènement qui déclare aussi le delegate, pas celle qui s'abonne.
    Et de toutes façon, dans ton cas le delegate correspondant existe déjà : RoutedEventHandler

    Citation Envoyé par jacquesprogram Voir le message
    Sans Delegate, comme ceci :
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.AddHandler(Diary.Diary.AppointmentCreatedEvent, AddressOf Appointment_Created)
    (ce que j'avais écrit au départ), ça ne compile pas...
    Quant à la procédure RaiseAppointmentCreatedEvent, oui, elle est bien appelée.
    C'est comme ça :
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.AddHandler Diary.Diary.AppointmentCreatedEvent, AddressOf Appointment_Created
    (pas de parenthèses)

    Ou si tu veux être explicite et préciser le type du delegate :
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.AddHandler Diary.Diary.AppointmentCreatedEvent, New RoutedEventHandler(AddressOf Appointment_Created)

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Par défaut
    J'ai fait les modifications que tu décris, et là, erreur :
    la formulation :
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.AddHandler Diary.Diary.AppointmentCreatedEvent, AddressOf Appointment_Created
    provoque le soulignement par l'Intellisense de AddressOf... avec cette erreur :
    'Address Of' expression cannot be converted to 'System.delegate' because type 'System.Delegate' is declared 'MustInherit' and cannot be created
    Voilà pourquoi j'étais passé par ce Delegate...
    En outre, lorsque je tape Me.AddHandler, l'Intellisense ne propose que 2 signatures, toutes deux avec parenthèses... (et de toutes façons, il me les rajoute automatiquement si je les omets)

  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 jacquesprogram Voir le message
    J'ai fait les modifications que tu décris, et là, erreur :
    la formulation :
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.AddHandler Diary.Diary.AppointmentCreatedEvent, AddressOf Appointment_Created
    provoque le soulignement par l'Intellisense de AddressOf... avec cette erreur :
    Bizarre... chez moi ça marche pourtant
    Et avec la 2e syntaxe que je t'ai proposée ?

    Citation Envoyé par jacquesprogram Voir le message
    En outre, lorsque je tape Me.AddHandler, l'Intellisense ne propose que 2 signatures, toutes deux avec parenthèses... (et de toutes façons, il me les rajoute automatiquement si je les omets)
    De plus en plus bizarre... moi si je les mets ça compile pas !

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

Discussions similaires

  1. UserControl et RoutedEvent
    Par Lelio1407 dans le forum Windows Presentation Foundation
    Réponses: 10
    Dernier message: 09/10/2009, 13h38
  2. [C#] UserControl
    Par topolino dans le forum ASP.NET
    Réponses: 8
    Dernier message: 22/01/2005, 20h26
  3. XMLRAD equivalent usercontrol ASp .NET
    Par le-roy_a dans le forum XMLRAD
    Réponses: 10
    Dernier message: 10/12/2004, 14h09
  4. Réponses: 12
    Dernier message: 18/03/2004, 15h09
  5. [VB6] [UserControl] Évènements personnalisés
    Par Frankywinky dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 27/05/2003, 17h56

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