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 :

Créer un Evènement dans ma Class [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 134
    Par défaut Créer un Evènement dans ma Class
    Bonjour à tous,

    Je suis débutant en Programmation VB et je n'arrive pas à comprendre la mise en place des évements.

    Dans l'exemple suivant, l'évement TextChange est bien appelé dans mon application aussi bien coté changement de Proprieté que lors de la Procédure Calcul.

    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
    21
    22
    23
    24
    25
     
    Public Class Class1
    Private _mTexte As String
     
    ' Déclare un évènement
    Public Event TextChange(ByVal UserName As String)
     
    Public Property Texte()
    Get
        Return _mTexte
    End Get
    Set(ByVal Value)
    If Value <> _mTexte Then
      RaiseEvent TextChange("hello")'<= déclenchement de l'évènement par RaiseEvent
    End If
    _mTexte = Value
    End Set
    End Property
     
    public sub Calcul(X as short)
     _mTexte = Cstr(X/5)
    RaiseEvent TextChange("Calcul")
    end sub
     
    End Class
    Cependant si je transforme la Procédure de Public En Private et que j'ajoute un constructeur comme montré ci-desous et bien plus rien ne fonctionne excepté l'évement au niveau de la Propriété

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    Public Class Class1
    Private _mTexte As String
     
    ' Déclare un évènement
    Public Event TextChange(ByVal UserName As String)
     
    Public Property Texte()
    Get
        Return _mTexte
    End Get
    Set(ByVal Value)
    If Value <> _mTexte Then
      RaiseEvent TextChange("hello")'<= déclenchement de l'évènement par RaiseEvent
    End If
    _mTexte = Value
    End Set
    End Property
     
    public Sub New(X as Short)
    Calul(X)
    RaiseEvent TextChange("New")
    end sub
     
    Private sub Calcul(X as short)
     _mTexte = Cstr(X/5)
    RaiseEvent TextChange("Calcul")
    end sub
     
    End Class
    Si quelqu'un peut m'aider dans ce problème car perso je ne comprend pas d'où ça pourrai venir.
    Merci à vous tous.

  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
    Le fait que la procédure Calcul soit privée ne change rien pour le déclenchement de l'évènement... A quel endroit appelles-tu cette procédure ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 134
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Le fait que la procédure Calcul soit privée ne change rien pour le déclenchement de l'évènement... A quel endroit appelles-tu cette procédure ?
    C'est bien ce que je pensais mais vue la situation je me mets des doutes. Voici le code coté application

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Public Class Form_GestionCalendrier
     
    Public WithEvents B As Class1
     
    Private Sub Bt_ImporterJours_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Bt_ImporterJours.Click
            B = New Class1(CInt(TextBox_Annee.Text))  ' Evenement New : ne fonctionne jamais
            B.calcul(CInt(TextBox_Annee.Text))  ' Evenement Calcul : fonctionne que lorsqu'elle est Public et appelé directement
    End Sub
     
    Private Sub B_TextChange() Handles B.TextChange
            MsgBox("ok")
    End Sub
     
    End Class
    Merci de ton aide

  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
    Bah tu appelles la méthode Calcul depuis une autre classe que celle où elle est déclarée... si tu la rends privée, tu ne peux plus faire ça ! Ça ne te donne pas une erreur de compilation ?

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    Bonjour,
    Dans la seconde class1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public Sub New(X as Short)
    Calul(X)
    RaiseEvent TextChange("New")
    end sub
     
    Private sub Calcul(X as short)
     _mTexte = Cstr(X/5)
    RaiseEvent TextChange("Calcul")
    end sub
     
    End Class
    Là, il doit s'agir d'un problème de copie, je pense : calcul.
    VB.NET ne déclenche pas les Events collés dans le code de la Sub New().
    L'Objet n'étant créé qu'à la fin de New(), il ne peut se voir abonné à des events avant sa création.
    Je me fie à TomLev.
    Comme le dit encore, TomLev ci dessus , dans une Private Sub, Event ne peut être accessible pour l'Objet créé.


    Donc si Calcul doit rester privé, on peut créer une sub publique dédiée aux Events, dans le genre :
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    Public Class Form_GestionCalendrier
     
        Private WithEvents B As Class1
     
        Private Sub Bt_ImporterJours_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Bt_ImporterJours.Click
            B = New Class1(CShort(TextBox_Annee.Text))
            B.RaiseEvents()
        End Sub
     
        Private Sub B_TextChange() Handles B.TextChange
            MsgBox("ok")
        End Sub
     
    End Class
     
        Public Class Class1
            Private _mTexte As String
     
            ' Déclare un évènement
            Public Event TextChange(ByVal UserName As String)
     
            Public Property Texte() As String
                Get
                    Return _mTexte
                End Get
                Set(ByVal Value As String)
                    If Value <> _mTexte Then
                        RaiseEvent TextChange("hello") '<= déclenchement de l'évènement par RaiseEvent
                    End If
                    _mTexte = Value
                End Set
            End Property
     
            Public Sub New(ByVal X As Short)
                Calcul(X)
            End Sub
     
            Private Sub Calcul(ByVal X As Short)
                _mTexte = CStr(X / 5)
            End Sub
     
            Public Sub RaiseEvents()
                RaiseEvent TextChange("Calcul")
            End Sub
     
        End Class

  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 chrismonoye Voir le message
    VB.NET ne déclenche pas les Events collés dans le code de la Sub New().
    Si, il les déclenche... c'est juste qu'il n'y a (généralement) personne pour les gérer, puisque l'objet n'est pas encore complètement créé. Je précise "généralement" parce qu'il serait en fait possible de gérer un évènement déclenché dans le constructeur, si le handler est passé en paramètre du constructeur par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public Sub New(X as Short, handler As TextChangeEventHandler)
        AddHandler Me.TextChange, handler
        Calcul(X)
        RaiseEvent TextChange("New")
    end sub

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

Discussions similaires

  1. Créer un évènnement dans une classe
    Par DotNET74 dans le forum Windows Phone
    Réponses: 6
    Dernier message: 03/03/2012, 08h29
  2. Créer une classe dans une classe
    Par FabaCoeur dans le forum C++
    Réponses: 9
    Dernier message: 02/06/2007, 20h26
  3. Attacher un Evènement dans une Class
    Par mr32 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 09/10/2006, 20h14
  4. Créer un évenement dans une class
    Par Walm dans le forum C++Builder
    Réponses: 3
    Dernier message: 05/05/2006, 14h36
  5. Créer une liste d'objets statiques dans une classe
    Par crossbowman dans le forum C++
    Réponses: 3
    Dernier message: 13/03/2006, 09h11

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