2010-09-08 4 views
1

Dans une application Visual Basic .NET, existe-t-il un moyen d'utiliser Handles sur un objet référencé dans une DLL écrite en C#? Compilant le code me donne l'erreur:Comment j'utilise la clause "Handles" de Visual Basic .NET avec une DLL écrite en utilisant C#?

'Handles' in modules must specify a 'WithEvents' variable qualified with a single identifier.

J'écris l'application Visual Basic .NET, mais j'ai le code source de la bibliothèque C# disponible.

Mon code actuel ressemble à ceci:

WithEvents Friend Module As ModuleNamespace.Module 
Sub EventHandler() Handles Module.Events.Event1 
    Console.WriteLine("Event1 fired.") 
End Sub 

Remplacement Module, ModuleNamespace et Event1 avec les noms réels.

Répondre

1

Il semble que vous n'ayez pas d'instance d'objet à portée de main pour les événements auxquels vous voulez vous lier. Pouvez-vous essayer d'utiliser AddHandler au lieu du mot-clé Handles?

Par exemple:

Private Sub BindEvents(ByVal someObject AS ClassInLibrary) 

    AddHandler someObject.EventName, AddressOf Foo 

End Sub 

Private Sub Foo(ByVal sender As Object, ByVal e As EventArgs) 

End Sub 
+0

J'utilise AddHandler maintenant, mais je me demandais s'il y avait un moyen plus efficace/plus propre à atteindre le même objectif, que la liaison d'exécution n'est pas nécessaire pour mon application. – Hello71

+0

À moins que vous n'ayez une variable de niveau de module comme MarkJ suggère que vous devrez appeler AddHandler vous-même. Lorsque vous utilisez WithEvents et Handles, le compilateur émet une propriété et appelle AddHandler lui-même dans le setter. –

2

Vous avez besoin d'une variable de niveau du module pour contenir l'instance d'objet. Code de l'air:

Private WithEvents mMyObject As CSharpObject 

Private Sub MyEvent(...) Handles mMyObject.SomeEvent 
Questions connexes