J'ai du code VB6 qui instancie une classe qui gère les événements qui sont levés à partir d'un composant VB.NET. Le VB6 est assez simple:Gestion des événements VB.NET dans le code VB6
private m_eventHandler as new Collection
...
public sub InitSomething()
dim handler as EventHandler
set handler = new EventHandler
m_eventHandler.Add handler
...
m_engine.Start
end sub
Notez que l'objet de gestionnaire d'événements doit vivre au-delà de la portée de la méthode init (ce qui est la raison pour laquelle il est stocké dans une collection). Notez également que m_engine.Start
indique le point dans le programme où le composant VB.NET commencerait à déclencher des événements.
Le gestionnaire d'événement réel (comme demandé):
Private WithEvents m_SomeClass As SomeClass
Private m_object as Object
...
Private Sub m_SomeClass_SomeEvent(obj As Variant)
Set obj = m_object
End Sub
Notez que m_object
est initialisé lorsqu'une instance de EventHandler
est créé.
Le code VB.NET qui déclenche l'événement est encore plus simple:
Public ReadOnly Property SomeProp() As Object
Get
Dim obj As Object
obj = Nothing
RaiseEvent SomeEvent(obj)
SomeProp = obj
End Get
End Property
Mon problème est que quand je debug le programme VB6, la première fois InitSomething
est appelée, l'événement pas être manipulé (le gestionnaire d'événement VB6 n'est jamais entré). Les appels suivants au InitSomething
fonctionnent.
Tout fonctionne comme je l'aurais prévu lorsque j'ai exécuté le programme en dehors du débogueur. À ce stade, je ne suis même pas sûr si c'est quelque chose que je devrais être inquiété.
Cela peut être ou ne pas être pertinent, mais le VB.NET a été converti à partir d'un VB6 en utilisant l'outil de conversion de code Visual Studio (et ensuite nettoyé manuellement).
Pouvez-vous afficher le gestionnaire d'événements actuel et la déclaration de l'objet de gestion? (celui avec "WithEvents")? –