Déclenché un évènement sous VB6, dans un module de class
zuntzu
Messages postés16Date d'inscriptionjeudi 12 mars 2009StatutMembreDernière intervention15 avril 2009
-
1 avril 2009 à 15:49
zuntzu
Messages postés16Date d'inscriptionjeudi 12 mars 2009StatutMembreDernière intervention15 avril 2009
-
3 avril 2009 à 13:36
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?
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201578 1 avril 2009 à 16:14
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)
zuntzu
Messages postés16Date d'inscriptionjeudi 12 mars 2009StatutMembreDernière intervention15 avril 2009 3 avril 2009 à 09:10
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
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201578 3 avril 2009 à 10:43
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) ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
zuntzu
Messages postés16Date d'inscriptionjeudi 12 mars 2009StatutMembreDernière intervention15 avril 2009 3 avril 2009 à 13:04
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.
zuntzu
Messages postés16Date d'inscriptionjeudi 12 mars 2009StatutMembreDernière intervention15 avril 2009 3 avril 2009 à 13:36
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.