Déclenché un évènement sous VB6, dans un module de class

Signaler
Messages postés
16
Date d'inscription
jeudi 12 mars 2009
Statut
Membre
Dernière intervention
15 avril 2009
-
zuntzu
Messages postés
16
Date d'inscription
jeudi 12 mars 2009
Statut
Membre
Dernière intervention
15 avril 2009
-
Bonjour,


Je n'arrive pas à enclenché un évènement dans un module de classe sous VB6.


Afin d'effectuer la gestion d'erreurs, je fait appel à des évènement dans  un

module de classe.


Les évènement son déclaré dans le module de classe (objet fluke) par:


Public Event ConnectionTCPPB()

(par exemeple)


Cette évènement est déclenché dans une fonction du module de classe (objet

fluke), par un:


RaiseEvent ConnectionTCPOK


Les évènement sont ensuite récupère sur la feuille par la déclaration de


Public WithEvents flukeEvents As fluke


dès lors sur la feuille, on peut utiliser une fonction ( reconnue

automatiquement par la feuille) se déclenchant lorsque

l'évènement est déclenché:


Private Sub flukeEvents_ConnectionTCPOK()

Label1.Caption = "fluke connecté"

End Sub


Le problème, c'est que malgré l'exécution de l'évènement par un RaiseEvent, la

fonction flukeEvents_ConnectionTCPOK(), n'est jamais enclenché.


Auriez vous une idée, ou solution pour régler ce problème?


cordialement

7 réponses

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
61
tu as bien instancié ton objet flukeEvents dans ta form ?
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
65
Salut
Erreur de programme ou de copier-coller ?
Tu déclares une fonction portant le nom ConnectionTCPPB et tu fais un RaiseEvent avec ConnectionTCPOK
As-tu bien mis, dans les options, la déclaration obligatoire des variables, générant ainsi l'apparition de Option Explicit en haut de chaque page de code ?
Cela évtirait ce genre d'erreur.

Sinon, dans un Event, tu peux aussi passer des variables, genre 
   Public Event Message(Texte As String)
et le déclencher avec 
   RaiseEvent Message("Connexion")
De cette manière, tu peux n'avoir qu'un seul event et récupérer des infos détaillées depuis la Classe

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
16
Date d'inscription
jeudi 12 mars 2009
Statut
Membre
Dernière intervention
15 avril 2009

Merci du conseil, je viens d'essayer le:
Public Event Message(Texte As String)
et le:
   RaiseEvent Message("Connexion")

sans succès.

Pour l'erreur signalé, il s'agit d'une faute de copier collé du programme dans le message déposé sur le forum désolé.
Pourtant  je peut récuperer  sur la feuille des fonctions associées aux évènements de la classe, par un :
Public WithEvents flukeEvents As fluke
(fluke étant ma classe)

Mais malgré un RaiseEvent
la fonction sur la feuille n'est pas déclenché.
cordialement
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
65
Re
Dans la mesure où tu vois l'évènement dans l'objet (dans le code), ta classe est reconnue, donc ça devrait fonctionner.
Bizarre
Es-tu sûr de passer sur ton RaiseEvent ?
As-tu utilisé le mode debug pour pister ton programme (F9, F8, F5) ?
Messages postés
16
Date d'inscription
jeudi 12 mars 2009
Statut
Membre
Dernière intervention
15 avril 2009

Oui en mode pas à pas je passe sur le RaiseEvent.
Le  problème c'est que je suis censé déclencher l'évènement par le RaiseEvent, or il ne se dèclenche pas.

cordialement
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
61
ton objet est bien instancié ?

je veux dire, celui qui execute le code que tu trace pas à pas...
est bien celui déclaré dans ta Form ?
Messages postés
16
Date d'inscription
jeudi 12 mars 2009
Statut
Membre
Dernière intervention
15 avril 2009

l'objet est bien instancié, puisque d'autres   fonction de l'objet servent à mon programme.

Le seul problème réside dans la gestion des évènement de l'objet, afin de pouvoir mettre des messages d'erreur sur la feuille.

Mon Objet s'appelle fluke, je déclare des évenement par:

Public Event ConnectionTCPOK() 'évenement

je déclenche cette évènement dans la fonction connection de l'objet par:

Public Sub connexion()
' on ferme la connexion potentiellement existante
WS_FLUKE.Close
' on se connecte au fluke
WS_FLUKE.Connect
Dim starttime
'on effectue une tempo afin de laisser le temsp au fluke de se connecter
starttime = Timer
Do While ((Timer < starttime + 2) And (WS_FLUKE.State <> 7))
    DoEvents
Loop
'opératiuon d'initialisation
Call initialisation_FLUKE
'on verifie la connexion
If WS_FLUKE.State = 7 Then

RaiseEvent ConnectionTCPOK
DoEvents
End If

End Sub

Puis sur ma feuille je récupère mes éveènement en déclarant flukeEvents (nom lambda) de la façon suivante:

Public WithEvents flukeEvents As fluke

Dès lors sur ma feuille, en selectionnant flukeEvents dans l'onglet en haut à gauche, j'ai tous mes évènement répertorier dans l'onglet en haut à droite.
Alors, je selectionne la fonction qui m'intéresse et appraît alors le code suivant:

Private Sub flukeEvents_ConnectionTCPOK()
End Sub

j'ajoute un label pour l'affichage si l'évènement est déclencher:

Label1.Caption = "fluke connecté"

Et voilà, normalement je déclenche un évènement et je peut transmettre sur ma feuille un message attestant que cet évènement s'est produit.

cordialement