2009-04-09 13 views
1

C#でこれを行う方法はわかっていますが、VB.NETでは構文の問題があります。なぜなら、 'ハンドル'イベントの機能を利用する必要があるからです。イベントを保存して呼び出す(VB.NET .NET 2.0)

私は何らかの形で(おそらくデリゲート)、属性のプロパティに格納する必要があるイベントを持っています(対応するイベントにリンクするプロパティに属性を追加するだけです)。

など。

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

他のプログラマがメソッドでVB.NET handlesキーワードを使用できるようにするには、イベントである必要があります。

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

答えて

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

残念ながらそれは良いと思います。 –

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 
関連する問題