2014-10-10 74 views
1

我想創建一個Sub,將一個事件連接到一個函數 在此之前,我想要刪除舊的事件。刪除舊處理程序並連接新的處理程序內部Sub

這是我到目前爲止,我知道它一定有什麼東西在這個方向 但我不斷收到錯誤 BC30577:「AddressOf」操作數必須是一個方法(沒有括號)的名稱。

Delegate Sub DelegateType() 

    Private Sub ConnectButtonWithEvent(ByRef Button As CommandButton, ByRef newFunctionAdres As DelegateType) 
     Static OldEvent As DelegateType 
     Static OldButton As CommandButton 

     If Not OldButton Is Nothing Then 
      RemoveHandler OldButton.Click, AddressOf OldEvent 
     End If 

     AddHandler Button.Click, AddressOf newFunctionAdres 

     OldEvent = AddressOf newFunctionAdres 
     OldButton = Button 
    End Sub 
+0

兩件事情 - 不正確的地址獲取傳遞給你的'AddHandler'聲明擺在首位?你測試過了嗎?其次,按鈕的簽名不像您爲DelegateType委託子指定的那樣。 – Paul 2014-10-10 08:38:25

+0

第一:不,我甚至不能編譯這個。對於第二個:我已經試過了:公共委託子委託類型(ByVal發件人爲System.Object,ByVal e爲System.EventArgs)在另一個嘗試中,我已經刪除了Add/RemoveHandler中的AddressOf函數,但編譯器告訴我它不能將Delagate類型轉換爲System.Eventhandler。 – 2014-10-10 08:52:00

+0

我也嘗試將newFunctionAdres作爲Eventhandler傳遞。這適用於向按鈕添加新事件,但我無法存儲此事件處理程序,因此我可以在下次調用時將其從按鈕中刪除。 – 2014-10-10 09:08:56

回答

1

對我來說,如下因素作品...

Private Sub test(ByVal btn As Button, ByVal fad As EventHandler) 
    AddHandler btn.Click, fad 
End Sub 


Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    test(tb, AddressOf ClickHandler) 
End Sub 

Private Sub ClickHandler(ByVal sender As Object, ByVal e As EventArgs) 
    'Do nothing 
End Sub 

的問題只是你用來在通過委託參數的類型 - 它應該是EventHandler

1

Thanx!

問題解決了 對於其他成員,這是最後的代碼:

Private Sub ConnectButtonWithEvent(ByRef Button As VisiWinNET.Forms.CommandButton, ByRef  newFunctionAdres As EventHandler) 

     Static OldEvent As EventHandler   
     Static OldButton As VisiWinNET.Forms.CommandButton 

     If Not OldButton Is Nothing Then 
      RemoveHandler OldButton.Click, OldEvent 
     End If 

     AddHandler Button.Click, newFunctionAdres 

     OldEvent = newFunctionAdres 
     OldButton = Button 
    End Sub