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 :

Est-ce possible de lever un événement (RaiseEvent) dans le Sub New?


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 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2006
    Messages : 102
    Par défaut Est-ce possible de lever un événement (RaiseEvent) dans le Sub New?
    J'ai la classe suivante où j'ai l'événement Initialized appelée à la fin du Sub New:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Public Class MyClass
       Public Event Initialized(ByVal sender As Object, ByVal e As EventArgs)
     
       Public Sub New()
                   RaiseEvent Initialized(Me, New System.EventArgs)
       End Sub
    End Class
    J'implémente l'événement dans ma Form1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Public Class Form1
       Private _MyClass as MyClass
     
       Private Sub Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
          Me._MyClass = New MyClass
       End Sub
     
       Private Sub _MyClass_Initialized(ByVal sender As Object, ByVal e As System.EventArgs) Handles _MyClass.Initialized
          MessageBox.Show("Allo")
       End Sub
    End Class
    La méthode _MyClass_Initialized n'est jamais appelée. J'imagine que comme l'object n'est pas encore complètement créé, le 'Handle' de l'événement est null.


    Quelqu'un a une idée? Autre solution?


    Merci d'avance,

    Pascal

  2. #2
    Membre émérite
    Avatar de dkmix
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    619
    Détails du profil
    Informations personnelles :
    Localisation : Jamaïque

    Informations forums :
    Inscription : Septembre 2007
    Messages : 619
    Par défaut
    dans le constructeur peut-être ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2006
    Messages : 102
    Par défaut
    dkmix, le 'Public Sub New' est un constructeur.

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Par défaut
    Pour savoir quand le constructeur a fini son job...

    Tu peux attendre qu'il ait passer à l'instruction suivant ton

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me._MyClass = New MyClass
    =>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
       Private Sub Load()
          Me._MyClass = New MyClass
    La fonction a faire après l'initialisation de Me._MyClass
       End Sub
    Si ta class est un contrôle, il me semble qu'il y a un évènement load qui se lance après le chargement de l'objet (J'ai ça sur un panel en tout cas).

    Mais je peine à trouver l'utilité de ce que tu veux bricoler là...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2006
    Messages : 102
    Par défaut
    sinople,

    Merci de la suggestion mais c'est que ma classe peut être instancier à plus d'un endroit et j'aime bien programmer par événements plutôt que de façon séquencielle.

    Et ma classe n'est pas un contrôle.

    J'ai pensé à un timer mais c'est pas très chic comme solution.

  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 : 43
    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
    Ca ne sert à rien de déclencher un évènement dans un constructeur, pour une raison très simple : vu que l'objet n'a pas encore fini d'être créé, personne n'a pu s'abonner à l'évènement, donc il n'y aura personne pour le recevoir...

    De toutes façons, l'appel à un constructeur est bloquant, donc ça ne sert pas à grand chose d'avoir une notification quand c'est fini

  7. #7
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    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 197
    Par défaut
    Citation Envoyé par Passepoil Voir le message
    sinople,

    Merci de la suggestion mais c'est que ma classe peut être instancier à plus d'un endroit et j'aime bien programmer par événements plutôt que de façon séquencielle.

    Et ma classe n'est pas un contrôle.

    J'ai pensé à un timer mais c'est pas très chic comme solution.

    pas spécialement analysé le fond, mais pour la forme il faut faire un factory

    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
     
    public class machin
     
      private sub new
      end sub
     
      public shared event MachinCreated(m as machin)
     
      public shared sub Create() as machin
         dim m as new machin
         raiseevent MachinCreated(m)
         return m
      end sub
     
    end class
    l'évènement est donc partagé, et il faut s'y a abonner par le type, et non une instance AddHandler Machin.MachinCreated, Addressof SubXouY
    et pour créer un machin il ne faut plus dim m as new machin mais dim m as machin = machin.Create
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 08/02/2008, 10h35
  2. [PHP-JS] Est il possible d'intégrer du code PHP dans du code javacript ?
    Par bilou95 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 16/07/2007, 09h05
  3. Réponses: 2
    Dernier message: 12/07/2007, 15h07
  4. Réponses: 1
    Dernier message: 01/03/2007, 08h24
  5. [WinDev] Est-il possible d'executer une application Win32 dans un site ?
    Par ran_hery dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 22/09/2006, 14h41

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