2009-04-09 17 views
1

我想知道如何在C#中做到這一點,但我在VB.NET中遇到語法問題,因爲我需要利用'句柄'事件。存儲和調用事件(VB.NET.NET 2.0)

我有不同的事件,我以某種方式(可能代表)需要存儲在屬性的屬性(我只是添加一個屬性鏈接到相應的事件屬性)。

E.g.

<BindEvent(EventThing)>_ 
Public ReadOnly Property IsTrue() As Boolean 
    Get 
    Return True 
    End Get 
End Property 

它們需要是事件,以便其他程序員可以在方法上使用VB.NET句柄關鍵字。

Public Delegate Sub TestEvent(ByVal sender As Object, ByVal e As Object) 
Public Event E As TestEvent 

Public Sub Test() Handles E 
End Sub 

這些特性都已經養了一般事件,我趕上,確定相關的屬性,從而獲取相關的屬性(和委託/事件)。然後我想提出相關的事件。

如果我只是使用綁定到特定事件的委託不會引發其他處理程序嗎?

我也想避免必須爲每個只使用事件類型上的Raise Event的屬性編寫子類,因爲這看起來多餘。

例如避免:

Public Event E As TestEvent 
Public Sub CallE(ByVal sender As Object, ByVal e As Object) 
    RaiseEvent E(sender, e) 
End Sub 
<BindDelegate(DelegateToCallE)>_ 
Public ReadOnly Property IsTrue() As Boolean 
    Get 
    Return True 
    End Get 
End Property 
+1

你能舉一個你想在C#中想要的例子嗎?如果這是一個語法問題,我可能會幫助更多,我只是無法理解你現在想要什麼,有點令人困惑 – Fredou 2009-04-09 01:20:12

回答

1
Public Class foo 

    Public Event TestEvent() 

End Class 


Public Class bar 
    Dim WithEvents x As New foo 
    Public Sub HandleEvent() Handles x.TestEvent 
    End Sub 
End Class 

這是你在找什麼?

+0

我認爲它是一樣好,因爲它不幸。 – 2009-05-22 19:28:32

0

我不太明白你在做什麼。你任何機會尋找語法如下:

Class BindEventAttribute 
    Inherits System.Attribute 

    Public Delegate Sub TestEvent() 
    Public Custom Event EventToRaise As TestEvent 
     AddHandler(ByVal value As TestEvent) 
      REM TODO: code what happens when anyone calls AddHandler on this event 
     End AddHandler 

     RemoveHandler(ByVal value As TestEvent) 
      REM TODO: code what happens when enyone calls RemoveHandler on this event 
     End RemoveHandler 

     RaiseEvent() 
      REM TODO: code what happens when anyone calls RaiseEvent on this event 
     End RaiseEvent 
    End Event 
End Class