Eigenes OnChange-Event zur Property hinzufügen (auch bei nicht eigenen Controls verwendbar)

    • VB.NET

      Eigenes OnChange-Event zur Property hinzufügen (auch bei nicht eigenen Controls verwendbar)

      Hallo Com,

      ich hab mir mal was gebastelt und ich denke, das kann manchen hier auch interessieren (ist ganz simpel).
      Manch einer hatte vielleicht schon das Problem er hat eine Property, die der User verändern kann oder vom System einfach geändert wird (beim Beispiel ist beides der Fall). Und man möchte wissen wann der Wert sich verändert hat.

      Beispiel: hier die Property WindowState einer Form:

      wir benötigen:
      1 Event zum handlen:

      VB.NET-Quellcode

      1. Public Event OnWindowStateChange(ByVal state As FormWindowState)

      in dem Event lass ich noch den neuen State übergeben damit man den Code kürzen kann

      1 Property, die verändert wird:

      VB.NET-Quellcode

      1. Public Overloads Property WindowState() As FormWindowState
      2. Get
      3. Return MyBase.WindowState
      4. End Get
      5. Set(ByVal value As FormWindowState)
      6. MyBase.WindowState = value
      7. End Set
      8. End Property

      man muss es als Overloads deklarieren damit es die Standard-Property überschreibt

      jetzt zum verfeinern:
      wir fragen ab ob sich der Wert beim Setten verändert hat mit

      VB.NET-Quellcode

      1. value <> MyBase.WindowState

      da der Wert sich auch noch verändern soll, wenn es ein neuer ist weisen wir diesen wieder zu :

      VB.NET-Quellcode

      1. MyBase.WindowState = value

      da sich dieser dann ja verändert hat benutzten wir einfach RaiseEvent um das Event aufzurufen:

      VB.NET-Quellcode

      1. RaiseEvent OnWindowStateChange(value)

      dabei übergebe ich auch gleichzeitig den neuen Wert

      im Ganzen sieht das dann so aus

      VB.NET-Quellcode

      1. Public Event OnWindowStateChange(ByVal state As FormWindowState)
      2. Public Overloads Property WindowState() As FormWindowState
      3. Get
      4. Return MyBase.WindowState
      5. End Get
      6. Set(ByVal value As FormWindowState)
      7. If MyBase.WindowState <> value Then
      8. MyBase.WindowState = value
      9. RaiseEvent OnWindowStateChange(value)
      10. End If
      11. End Set
      12. End Property


      Ich hoffe das ganze hat euch geholfen.

      MfG M4n94fr34k