2011-12-20 8 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の魔法ならいくつか残っていました! ありがとうございました。 –

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がChangedイベントのほとんどに似ている以下のパターンを使用します。

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