我創建一個程序中,我有一個公開定義布爾值如何處理布爾值的PropertyChange?
Public boolOverallStatus As Boolean = True
,我需要執行一些代碼每當布爾值的變化。在以前的應用程序中,實際的表單項更改處理了此操作,但它可以通過幾個不同的子項進行更改。
我該如何處理?我正在通過msdn尋找,但它很混亂。 簡而言之:如何在發生布爾值更改事件時執行代碼。
我創建一個程序中,我有一個公開定義布爾值如何處理布爾值的PropertyChange?
Public boolOverallStatus As Boolean = True
,我需要執行一些代碼每當布爾值的變化。在以前的應用程序中,實際的表單項更改處理了此操作,但它可以通過幾個不同的子項進行更改。
我該如何處理?我正在通過msdn尋找,但它很混亂。 簡而言之:如何在發生布爾值更改事件時執行代碼。
使它成爲一個屬性。
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
使用公共屬性而不是公共變量。然後,您可以將屬性的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
您還可以定義一個事件,每次狀態更改時都會觸發該事件。優點是,這些更改可以由依賴於此狀態的應用程序部分來處理。否則,邏輯將不得不與地位一起實施。
應用程序的其他部分可以用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
我使用以下模式,它類似於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中,你可以使用WithEvents
和Handles
關鍵字處理事件:
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
完美!我處理了其餘的一些如果然後IfElse魔術! 非常感謝。 – 2011-12-20 20:05:21