2012-03-27 33 views
1

我有一段代碼:vb.net,不能調用事件直接

innerchannel.Closing += Function(sender, e) 
         RaiseEvent Closing(sender, e) 

         End Function 

有與

innerchannel.Closing 

在VisualStudio中告訴我一個問題:

Public Event Closing(sender As Object, e As System.EventArgs)' is an event, and cannot be called directly. Use a 'RaiseEvent' statement to raise an event. 

我如何修復此問題以便相應地工作?

+0

你試圖完成什麼?你是否試圖聽取'innerchannel'對象的'Closing'事件,並讓它通過本地函數'Closing'處理? – lsuarez 2012-03-27 20:16:41

回答

7

我假設你想要一個處理程序添加到您的交易事件:

AddHandler innerchannel.Closing, AddressOf Closed 

如果你想提出一個自定義事件,例如一個UserControl

Class Channel 
    Inherits UserControl 
    Public Event Closing(ch As Channel) 

    ' this could be for example a button-click handler 
    Protected Sub Closed(sender As Object, e As System.EventArgs) 
     RaiseEvent Closing(Me) 
    End Sub 
End Class 
+0

完美,謝謝! – 2012-03-27 20:38:51

6

您不要在VB中使用+=來添加事件處理程序。您使用AddHandler

你的代碼試圖調用Closing就好像它是一個函數並對其結果進行了添加。

4

冷杉你一定要重視方法事件處理程序是這樣的:

AddHandler innerchannel.Closing, AddressOf Closed 

,並使用RaiseEvent

音符從MSDN:

如果事件尚未在模塊內聲明其中它是 引發,發生錯誤。以下片段說明了一個事件 聲明和引發該事件的過程。