2011-12-20 207 views
2

我創建一個程序中,我有一個公開定義布爾值如何處理布爾值的PropertyChange?

Public boolOverallStatus As Boolean = True 

,我需要執行一些代碼每當布爾值的變化。在以前的應用程序中,實際的表單項更改處理了此操作,但它可以通過幾個不同的子項進行更改。

我該如何處理?我正在通過msdn尋找,但它很混亂。 簡而言之:如何在發生布爾值更改事件時執行代碼。

回答

6

使它成爲一個屬性。

Private _boolOverallStatus As Boolean = True 

Property boolOverallStatus As Boolean 
    Get 
    Return _boolOverallStatus 
    End Get 
    Set(ByVal value as Boolean) 
    If value <> _boolOverallStatus Then 
     _boolOverallStatus = value 
     '// handle more code changes here.' 
    End If 
    End Set 
End Property 
+0

完美!我處理了其餘的一些如果然後IfElse魔術! 非常感謝。 – 2011-12-20 20:05:21

2

使用公共屬性而不是公共變量。然後,您可以將屬性的Set方法中的邏輯放置,以便在屬性設置完成後執行。

http://msdn.microsoft.com/en-us/library/65zdfbdt%28v=VS.100%29.aspx

Private number As Integer = 0 
Public Property MyNumber As Integer 
    ' Retrieves number. 
    Get 
    Return number 
    End Get 
    ' Assigns to number. 
    Set 
     CallLogicHere() 
     number = value 
    End Set 
End Property 
1

您還可以定義一個事件,每次狀態更改時都會觸發該事件。優點是,這些更改可以由依賴於此狀態的應用程序部分來處理。否則,邏輯將不得不與地位一起實施。

應用程序的其他部分可以用AddHandler訂閱事件。

Public Class OverallStatusChangedEventArgs 
    Inherits EventArgs 

    Public Sub New(newStatus As Boolean) 
     Me.NewStatus = newStatus 
    End Sub 

    Private m_NewStatus As Boolean 
    Public Property NewStatus() As Boolean 
     Get 
      Return m_NewStatus 
     End Get 
     Private Set 
      m_NewStatus = Value 
     End Set 
    End Property 
End Class 

Module modGlobals 
    Public Event OverallStatusChanged As EventHandler(Of OverallStatusChangedEventArgs) 

    Private m_boolOverallStatus As Boolean = True 
    Public Property BoolOverallStatus() As Boolean 
     Get 
      Return m_boolOverallStatus 
     End Get 
     Set 
      If Value <> m_boolOverallStatus Then 
       m_boolOverallStatus = Value 
       OnOverallStatusChanged(Value) 
      End If 
     End Set 
    End Property 

    Private Sub OnOverallStatusChanged(newStatus As Boolean) 
     RaiseEvent OverallStatusChanged(GetType(modGlobals), New OverallStatusChangedEventArgs(newStatus)) 
    End Sub 
End Module 
3

我使用以下模式,它類似於Microsoft對其大多數更改事件所做的操作。

Class MyClass 

    Public Property OverallStatus As Boolean 
     Get 
      Return _OverallStatus 
     End Get 
     Set (value As Boolean) 
      If _OverallStatus = value Then Exit Property 
      _OverallStatus = value 
      OnOverallStatusChanged(EventArgs.Empty) 
     End Set 
    End Property 

    Private _OverallStatus As Boolean = False 

    Protected Overridable Sub OnOverallStatusChanged(e As EventArgs) 
     RaiseEvent OverallStatusChanged(Me, e) 
    End Sub 

    Public Event OverallStatusChanged As EventHandler 
End Class 

在VB中,你可以使用WithEventsHandles關鍵字處理事件:

Class MyParent 
    Private WithEvents myObject As New MyClass() 

    Private Sub myobject_OverallStatusChanged(sender As Object, e As EventArgs) Handles myObject.OverallStatusChanged 
     ' TODO: Write handler. 
    End Sub 
End Class 

OnOverallStatusChanged功能是繼承類獲取第一槍在應對變化非常有用。

Class MyOtherClass 
    Inherits MyClass 

    Protected Overrides Sub OnOverallStatusChanged(e As EventArgs) 
     ' TODO: Do my stuff first. 
     MyBase.OnOverallStatusChanged(e) 
    End Sub 
End Class