RaiseEvents dan sun module de classe

Résolu
zuntzu Messages postés 16 Date d'inscription jeudi 12 mars 2009 Statut Membre Dernière intervention 15 avril 2009 - 14 avril 2009 à 16:18
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 15 avril 2009 à 15:09
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

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
15 avril 2009 à 08:59
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
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
15 avril 2009 à 11:20
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
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
14 avril 2009 à 16:37
as tu bein déclaré ton instance ainsi :

Private WithEvents monObjet1 As Class1

et instancié:

Set monObjet1 = New Class1
0
zuntzu Messages postés 16 Date d'inscription jeudi 12 mars 2009 Statut Membre Dernière intervention 15 avril 2009
14 avril 2009 à 17:08
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
14 avril 2009 à 19:32
pourrais on voir ton code ?
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
15 avril 2009 à 01:42
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)
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
15 avril 2009 à 01:43
As-tu ajouté le New dans le Set ?
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
15 avril 2009 à 07:05
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
0
zuntzu Messages postés 16 Date d'inscription jeudi 12 mars 2009 Statut Membre Dernière intervention 15 avril 2009
15 avril 2009 à 08:48
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.
0
zuntzu Messages postés 16 Date d'inscription jeudi 12 mars 2009 Statut Membre Dernière intervention 15 avril 2009
15 avril 2009 à 10:43
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
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
15 avril 2009 à 10:45
sans code, difficile de diagnostiquer quoi que ce soit
0
zuntzu Messages postés 16 Date d'inscription jeudi 12 mars 2009 Statut Membre Dernière intervention 15 avril 2009
15 avril 2009 à 11:12
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.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
15 avril 2009 à 11:24
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...
0
zuntzu Messages postés 16 Date d'inscription jeudi 12 mars 2009 Statut Membre Dernière intervention 15 avril 2009
15 avril 2009 à 12:31
Merci beaucoup!!!
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
15 avril 2009 à 15:09
Quelle patience, ce Renfield !
0
Rejoignez-nous