2010-09-08 52 views
1

在Visual Basic .NET应用程序中,有没有办法在用C#编写的DLL中引用的对象上使用Handles?编译代码给我的错误:如何使用Visual Basic .NET中的“Handles”子句和使用C#编写的DLL?

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

我正在写在Visual Basic .NET应用程序,但我有可用的C#库的源代码。

我当前的代码看起来是这样的:

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

更换ModuleModuleNamespaceEvent1与实际名称。

回答

1

这听起来像你没有一个对象实例方便事件绑定到。你可以尝试使用AddHandler而不是Handles关键字吗?

例如:

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

我使用的AddHandler现在,但我只是想知道是否有完成同样的目标,更高效/更清洁的方式,因为运行时绑定不需要我的应用程序。 – Hello71 2010-09-09 00:23:33

+0

除非你有像MarkJ这样的模块级变量,否则你必须自己调用AddHandler。当你使用WithEvents和Handle时,编译器实际上会发射一个属性并在setter中调用AddHandler本身。 – 2010-09-09 01:06:08

2

你需要一个模块级变量包含对象实例。航空代码:

Private WithEvents mMyObject As CSharpObject 

Private Sub MyEvent(...) Handles mMyObject.SomeEvent 
相关问题