2009-12-15 2 views
0

나는 이벤트 StatusChanged로 입력 SomeObject의 객체를 가지고있다.부동산 이벤트를 청취 할 대상을 어떻게 얻나요?

StatusChanged이라는 유형의 SomeObject 속성이 있습니다. SomeObject에서 개인 함수 내에서

, 나는 Status 해고했다고 StatusChanged 이벤트를시합니다 ( StatusChanged 이벤트를 트리거 포함) 일부 로직을 실행하고 싶습니다. 나는 잠시 동안 이벤트에서 벗어났다. 그래서 나에게는 약간 흐리다. 어떻게해야합니까?

은 내가 외부를 얻을 것 어떻게 위를 할 수없는 경우에, ASP.NET/VB.NET에

감사합니다 :)

편집 확인을 쓰고 있어요 내부 개체 (Status)가 StatusChanged 이벤트가 발생하면 개체 (SomeObject)가 StatusChanged 이벤트를 발생시키지 않습니까?

+0

이러한 개체 간의 관계를 지정해야합니다. 'SomeObject'는 타입이'Status' 멤버를 가지고 있습니까? 'StatusChanged' 이벤트에 관심이있는 객체입니까? –

+0

@john - 네, 맞습니다. 'SomeObject'에'Status' 유형의 속성이 있습니다 ... 명확하지 않은 것에 대해 사과드립니다! – Jason

답변

1

이벤트는 그런 식으로 작동하지 않습니다. 이벤트가 실행되었는지 여부에 따라 논리를 수행 할 수 없습니다.. 이벤트가 발생하면 의 논리 만 쓸 수 있습니다.


좋습니다. VB.NET에서이 작업을 수행한지 얼마되지 않았습니다.

Public Enum CurrentStatus 
    Good 
    Bad 
End Enum 

Public Class StatusEventArgs 
    Inherits EventArgs 
    Private _currentStatus As CurrentStatus 

    Public Property CurrentStatus() As CurrentStatus 
     Get 
      Return _currentStatus 
     End Get 
     Set(ByVal value As CurrentStatus) 
      _currentStatus = value 
     End Set 
    End Property 
End Class 

Public Class StatusClass 
    Public Event StatusChanged As EventHandler(Of StatusEventArgs) 

    Protected Overridable Sub OnStatusChanged(ByVal newStatus As CurrentStatus) 
     Dim s As New StatusEventArgs() 
     s.CurrentStatus = newStatus 
     RaiseEvent StatusChanged(Me, s) 
    End Sub 
End Class 

Public Class SomeClass 
    Private _status As StatusClass 
    Public Event StatusChanged As EventHandler(Of StatusEventArgs) 

    Protected Overridable Sub OnStatusChanged(ByVal newStatus As CurrentStatus) 
     Dim s As New StatusEventArgs() 
     s.CurrentStatus = newStatus 
     RaiseEvent StatusChanged(Me, s) 
    End Sub 

    Public Property Status() As StatusClass 
     Get 
      Return _status 
     End Get 
     Set(ByVal value As StatusClass) 
      If Not _status Is Nothing Then 
       RemoveHandler _status.StatusChanged, AddressOf StatusHandler 
      End If 

      _status = value 

      If Not _status Is Nothing Then 
       AddHandler _status.StatusChanged, AddressOf StatusHandler 
      End If 
     End Set 
    End Property 

    Private Sub StatusHandler(ByVal sender As Object, ByVal e As StatusEventArgs) 
     OnStatusChanged(e.CurrentStatus) 
    End Sub 
End Class 
+0

바. 나는 사건을 빨아 먹는다. 나는이 대답을 두려워했다. – Jason

+0

그러면 내부 객체의'StatusChanged' 이벤트가 발생하면 바깥 쪽 객체가'StatusChanged' 이벤트를 발생 시키게됩니까? – Jason

관련 문제