RaiseEvents dan sun module de classe [Résolu]

Signaler
Messages postés
16
Date d'inscription
jeudi 12 mars 2009
Statut
Membre
Dernière intervention
15 avril 2009
-
cs_Jack
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
-
Bonjour j'utilise un raiseEvent dans un module de classe, je récupère bien les évènement dans les combo box de ma feuille. Mais a priori malgré un raiseEvents, l'évènement n'est jamais déclencher.
cordialement

15 réponses

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
60
même chose que précedemment
tu utilises dans ta form DEUX instance distinctes de ta class toto1

tu es abonné aux evenements de l'instance nommée 'tata'
et tu déclenche l'évenement de l'instance nommée 'tests' en appelant sa méthode 'titi'



c'est exactement le souci que je t'ai signalé la semaine dernière


'# Pour la feuille j'ai taper ceci:
Private WithEvents tata As toto1

Private Sub Command1_Click()
'on appele la fonction titi
Label1.Caption = tata.titi
End Sub

Private Sub Form_Load()
'on initialise tata (ne peut se faire a la déclaration, du fait du mot clé WithEvents)
Set tata = New toto1
Label1.Caption = False
End Sub

Private Sub tata_toto1(sMessage As String)
'on effectue une action suite à l'évènement
MsgBox sMessage
Command1.Caption = "titi"
End Sub



'#Dans le module de classe il y a:
Public Event toto1(sMessage As String)

Public Function titi() As Boolean
'fonction d emon objet renvoyant la valeur vrai lorsqu'elle est executer
'declenche l'évènement toto1
titi = True
RaiseEvent toto1("Bonjour ")
End Function
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
60
Dans le genre sourdingue...

Tu fais là exactement ce que tu faisait dans ton projet de test et que je t'ai corrigé.

A savoir que tu joues simltanément avec DEUX instances distinctes de ta classe fluke

vires la ligne
Dim fluke As New fluke
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
60
as tu bein déclaré ton instance ainsi :

Private WithEvents monObjet1 As Class1

et instancié:

Set monObjet1 = New Class1
Messages postés
16
Date d'inscription
jeudi 12 mars 2009
Statut
Membre
Dernière intervention
15 avril 2009

Oui, cela a été fait. J'avais déjà posé la question la semaine dernière. J'ai appliqué la solution mais elle ne marche pas.

cordialement
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
60
pourrais on voir ton code ?
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
63
zuntzu : Tu es gentil, mais cela fait 3 fois que tu poses la question.
Depuis le temps, tu devrais savoir qu'il faut donner le maximum de détails et pas attendre qu'on te les demande.

As-tu comme je te l'ai déjà proposé auparavant, tester le RaiseEvent dans un nouveau projet vide, sans rien d'autre ?
Parce que ton problème ne vient pas de ces lignes mais d'un élément externe à ces lignes.
Il sufft que tu aies créé une variable qui s'appelle comme ton Event ou autre mot réservé et VB ne sait plus quoi faire.

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
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
63
As-tu ajouté le New dans le Set ?
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
60
ah, c'est encore le fluke...
je te l'avais déjà donné, ce code. tu as du le perdre, hum!

'code de la feuille:

Public WithEvents TOTOEvents As TOTO

Private sub Form_Load()
Set TOTOEvents = New TOTO
End sub

Private Sub quefaitoto_Click()
TOTOEvents.totopartie
End Sub

Private Sub TOTOEvents_fêteàtoto()
Label1.Caption = "toto fait la faite!"
End Sub


---------------------

'code de la classe TOTO
Public Event fêteàtoto()

Public sub totopartie()
RaiseEvent fêteàtoto()
End Sub
Messages postés
16
Date d'inscription
jeudi 12 mars 2009
Statut
Membre
Dernière intervention
15 avril 2009

Bonjour,
eh oui c'est toujours le fluke
J'ai tester dans un autre projet: ô rage ô désespoir ça ne marche pas:

Pour la feuille j'ai taper ceci:
Dim toto As Boolean
Dim tests As New toto1
Public WithEvents tata As toto1

Private Sub Command1_Click()
'on appele la fonction titi
toto = tests.titi
Label1.Caption = toto
End Sub

Private Sub Form_Load()
'on initialise
Set tata = New toto1

toto = False
Label1.Caption = toto
End Sub

Private Sub tata_toto1(sMessage As String)
'on effectue une action suite à l'évènement
 MsgBox sMessage
Command1.Caption = "titi"
End Sub

Dans le module de classe il y a:
Public Event toto1(sMessage As String)
Public Function titi() As Boolean
'fonction d emon objet renvoyant la valeur vrai lorsqu'elle est executer
'declenche l'évènement toto1
titi = True
RaiseEvent toto1("Bonjour ")
End Function

Pourtant en mode pas à pas: je rentre bien dans la fonction titi (titi passe à vrai) et je passe bien sur le raiseEvent.

Voilà, désolé si j'ai posé trois fois la question. Mais dans mon projet fluke, seul la gestion des évènements n'est pas encore opérationnel.

cordialement et en vous remerciant.
Messages postés
16
Date d'inscription
jeudi 12 mars 2009
Statut
Membre
Dernière intervention
15 avril 2009

Merci beaucoup
ça marche.
Le problème viens bien de mon autre programme, en effet en suivant le tata.titi ça marche, mais si j'ai une winsock dans le titi, ça marche moins bien.
Je vais essayer de trouver une solution.
Merci
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
60
sans code, difficile de diagnostiquer quoi que ce soit
Messages postés
16
Date d'inscription
jeudi 12 mars 2009
Statut
Membre
Dernière intervention
15 avril 2009

ok: sur ma feuille j'ai:

'je declare mon objet
Dim fluke As New fluke

Public WithEvents flukeEvents As fluke 'on récupère les évènement de la classe fluke
Private Sub Form_Load()
Set flukeEvents = New fluke
fluke.Initialize WS   'WS est ma winsock sur la feuille

End Sub

Private Sub CmdConnexion_Click()

fluke.connexion
flukeEvents.connexion
End Sub

Private Sub flukeEvents_ConnectionTCPOK()
MsgBox ("ok")
End Sub

dans mon module de classe, il y a :

Dim WS_FLUKE As Winsock

Public Event ConnectionTCPOK() 'évenement

Public Sub Initialize(WS As Winsock)
    'on lie la winsock du fluke à la winsock de la page principal
    Set WS_FLUKE = WS
    'on définit l'IP et le numèro de port du FLUKE
    WS_FLUKE.RemoteHost = "192.168.0.254"
    WS_FLUKE.RemotePort = 3490
    
End Sub

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

'on verifie la connexion
If WS_FLUKE.State = 7 Then
'on déclecnhe l'évènement  connection TCP OK
RaiseEvent ConnectionTCPOK
DoEvents
End If
If WS_FLUKE.State <> 7 Then
 
End If
End Sub

voilà pour l'opération de connexion avec winsock et l'évènement qui permet de la verifier.
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
60
je change de formulation:

'je declare mon objet
Dim fluke As New fluke
Public WithEvents flukeEvents As fluke 'on récupère les évènement de la classe fluke

ici, on va renommer, parceque les noms me plaisent pas:

'je declare mon objet
Dim monObjet1 As New maClasse1
Public WithEvents monObjet2 As maClasse1

tu vois bien que tu déclare deux objets distincts, de ta classe maClasse1

AUCUN lien n'est établit entre les deux.

a la limite, si vraiment, et pour d'obscures raisons tu souhaites pourvoir agir sur ton 'fluke' via ces deux references, tu peux faire:


Dim fluke As New fluke
Public WithEvents flukeEvents As fluke

Private Sub Form_Load()
set flukeEvents = fluke
End Sub


Mais de là a y trouver un interet quelconque...
Messages postés
16
Date d'inscription
jeudi 12 mars 2009
Statut
Membre
Dernière intervention
15 avril 2009

Merci beaucoup!!!
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
63
Quelle patience, ce Renfield !