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 :

Evènement inatendu avec le withevent


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
    Janvier 2008
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 156
    Par défaut
    bonjour

    J'ai des phénomènes que je ne m'explique pas. Vous allez peut etre pouvoir m'aider.

    Je vais aller droit au but, voici mon code :

    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
    public class CLASS1
     
        Public WithEvents Cls_Poste As New POSTE()
        Delegate Sub Deleg_Affiche()
     
        Private Sub _Reception() Handles Cls_Poste.Reception
            Try
                If me.InvokeRequired Then
                    me.Invoke(New Deleg_Affiche(AddressOf me.TextBox_AfficheDonnees))
                End If
     
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End Sub
    end class
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class POSTE
     
        Public Event Reception()
     
    end class
    Le problème étant le suivant :
    Lorsque l'évènement monte avec RaiseEvent.Reception( ), j'ai l'évènement d'un textbox (TextChanged) qui monte lui aussi.

    Merci de votre aide

    Et chose que je n'avais pas vu, mais Cls_Poste As New POSTE() se lance et me recréé une nouvelle instance de POSTE alors qu'il ne le faudrait pas

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    quand tu raises l'event sur la classe poste, si tu viens d'un autre thread, tu invoque un délégué qui a vu de nez modifie le texte du textbox, donc ca me parait normal que celui ci t'indique que le texte a changé

    par contre que ca fasse un new poste, rien dans ton code n'indique se comportement, il nous en faudrait plus pour trouver l'erreur de codage
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 254
    Par défaut
    J'imagine que TextBox_AfficheDonnees est l'évènement Textbox qui se déclenche, non ???

    Il ne se déclenche pas mais c'est toi qui l'appelle via un délégué.

    Et dans cette procédure TextBox_AfficheDonnees, tu n'essairais pas, par hasard d'instancier la classe CLASS1 ?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 156
    Par défaut
    Bon et bien je crois que je me suis embrouillé la tete.
    Veuillez nous excuser mais je ne suis pas seul dans ma tete ^^

    Je reprend donc, j 'ai deux class :

    Class IHM
    et
    Class POSTE

    Dans la class IHM, il s'y trouve des Textbox (TextBox1 et Texbox2)

    Voici les codes contenu dans les class (sauf construction interface)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Class IHM
     
        Public WithEvents Cls_POSTE as new POSTE( )
     
    End Class

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Class POSTE
     
        Public Sub Affichage()
            IHM.TextBox2.Text = "Traitement OK"
        End Sub
     
    End Class
    En mode "Pas à Pas", voici le cheminement :

    Arrivé sur la ligne IHM.TextBox2.Text = "Traitement OK"
    Passage sur IHM sur la ligne Public WithEvents Cls_POSTE as new POSTE( )
    Passage sur les différentes variables de POSTE
    Passage sur les différentes variables de IHM
    Retour sur IHM.TextBox2.Text = "Traitement OK"
    Et déroulement correcte de la suite

    Mais pourquoi me réinstencie t il POSTE ?

  5. #5
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 254
    Par défaut
    Ah ben voilà, on a, en quelque sorte, un exemple de référence circulaire.

    Dans ton instance de la classe POSTE, tu fais appel à un composant de la classe IHM. Tu crée donc implicitement une instance de la classe IHM (qui apparement n'était pas déjà créée), qui crée à son tour une nouvelle instance de la classe POSTE dûe à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public WithEvents Cls_POSTE as new POSTE( )
    Tu ne peux faire que des aller-retour entre classe, il ne faut surtout pas tourner en rond.

    En clair, si dans ta classe IHM, tu utilise la classe POSTE, celle-ci ne doit pas à son tour intervenir sur la classe IHM.
    Au contraire, elle doit renvoyer ses données vers la classe IHM par une valeur de retour d'une fonction, ou une propriété par exemple, et c'est à la classe IHM à faire ses propres modifs en retour de l'appel de la classe POSTE

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    plusieurs gros défauts donc

    l'interface ne doit pas être modifiée par une classe de données, elle doit par exemple renvoyer un évènement avec le texte à afficher

    il ne faut pas utiliser les variables implicites de vb.net

    quand tu fais un form nommé IHM tu peux écrire IHM partout dans le code mais il ne faut surtout pas !

    si tu voulais modifier ihm depuis poste, il faudrait faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    (...) new poste (me)
     
    class poste
     
      private _ihm as IHM
      public sub new (ihm as IHM)
        _ihm = ihm
      end sub
     
      autre sub
        _ihm.textbox2...
      end sub
    m'enfin comme je l'ai dit il ne faut pas manipuler l'ihm depuis un classe de données
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 156
    Par défaut
    D'accord, je comprend mieux.

    Mais j'ai encore quelques lacune la dessus. Comment faire pour afficher mon texte à partir de ma class POSTE ??

    Je précise que IHM est la class initialisé au départ lors du lancement de mon appli.

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    IHM est un form ?

    si oui il faut te faire une norme de nommage
    genre FRMmachin
    TXTbidule
    CMBautre
    etc...

    ca permet de rendre le code lisible, surtout quand le poste sur un forum
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. Les Evénements Etendus avec SQL Server 2008
    Par elsuket dans le forum Contribuez
    Réponses: 8
    Dernier message: 28/01/2016, 12h55
  2. Evénement Checkbox avec Onclick ne fonctionne pas
    Par houssem86 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 22/10/2013, 11h46
  3. Réponses: 3
    Dernier message: 16/05/2011, 13h29
  4. Evénement MouseMove avec Click Gauche
    Par maglif dans le forum Windows Forms
    Réponses: 17
    Dernier message: 18/07/2008, 10h40
  5. Evénements avec Swing
    Par Djakisback dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 25/02/2006, 17h50

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