Eigene Klasse für StatusStrip + Zugriff auf Controls

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Refratechnik.

    Eigene Klasse für StatusStrip + Zugriff auf Controls

    Moin,

    in Anlehnung an:

    Button blinken lassen

    (sorry, irgendwie krieg ich den nicht als Hyperlink eingefügt)

    habe ich mir eine eigene Klasse für nen StatusStrip erstellt, damt ich dieses einfach blinken lassen kann:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports System.Timers
    3. Public Class CFlashingStatusStrip
    4. Inherits StatusStrip
    5. #Region "Variablen"
    6. Private _colOk As Color
    7. Private _colFlash1 As Color
    8. Private _colFlash2 As Color
    9. Private _EnableFlashing As Boolean
    10. Private _timFlash As New Timer(1000)
    11. Private _timInterval As Integer
    12. #End Region
    13. #Region "Properties"
    14. Public Property EnableFlashing As Boolean
    15. Get
    16. Return _EnableFlashing
    17. End Get
    18. Set(value As Boolean)
    19. _EnableFlashing = value
    20. If _EnableFlashing = False Then
    21. _timFlash.Enabled = False
    22. BackColor = _colOk
    23. Else
    24. _timFlash.Enabled = True
    25. Tick(Nothing, Nothing)
    26. End If
    27. End Set
    28. End Property
    29. Public Property ColOk As Color
    30. Get
    31. Return _colOk
    32. End Get
    33. Set(value As Color)
    34. _colOk = value
    35. End Set
    36. End Property
    37. Public Property ColFlash1 As Color
    38. Get
    39. Return _colFlash1
    40. End Get
    41. Set(value As Color)
    42. _colFlash1 = value
    43. End Set
    44. End Property
    45. Public Property ColFlash2 As Color
    46. Get
    47. Return _colFlash2
    48. End Get
    49. Set(value As Color)
    50. _colFlash2 = value
    51. End Set
    52. End Property
    53. Public Property TimInterval As Integer
    54. Get
    55. Return _timInterval
    56. End Get
    57. Set(value As Integer)
    58. _timInterval = value
    59. _timFlash.Interval = _timInterval
    60. End Set
    61. End Property
    62. #End Region
    63. #Region "Konstruktoren"
    64. Public Sub New()
    65. AddHandler _timFlash.Elapsed, AddressOf Tick
    66. _colOk = Color.LimeGreen
    67. _colFlash1 = Color.Yellow
    68. _colFlash2 = Color.Red
    69. End Sub
    70. Public Sub New(ByVal ColOk As Color, ByVal ColFlash1 As Color, ByVal ColFlash2 As Color)
    71. AddHandler _timFlash.Elapsed, AddressOf Tick
    72. _colOk = ColOk
    73. _colFlash1 = ColFlash1
    74. _colFlash2 = ColFlash2
    75. End Sub
    76. #End Region
    77. #Region "Events"
    78. Private Sub Tick(sender As Object, e As EventArgs)
    79. If EnableFlashing Then
    80. If BackColor = _colFlash1 Then
    81. BackColor = _colFlash2
    82. Else
    83. BackColor = _colFlash1
    84. End If
    85. End If
    86. End Sub
    87. #End Region
    88. End Class


    Ist ja vom Prinzip her erstmal simpel - ich kann mir jetzt diesen angepassten StatusStrip einfach auf die Form ziehen. Wie sieht es aber aus, wenn ich auch an die Elemente des StatusStrip ran will (Progressbar und StatusLabel)? Z.B. wenn ich die StatusLabels auch zum Blinken bringen möchte (nur als Beispiel).

    MfG
    Refra
    Worum geht es Dir? Dass Du mit dieser Klasse auch alle Sub-CEs mitblinken lässt, also alle synchron blinken oder dass Du ein allgemeines Blinkverhalten auf verschiedene CEs unabhängig voneinander erzeugen kannst, ohne für jedes CE eine eigene Klasse zu schreiben? (Damit will ich nicht automatisch Hoffnung machen, dass das ein oder andere klappt)
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Letztendlich geht es mir nur darum, wie ich an die Sub-CEs komme und diese modifizieren kann - mit eigener Klasse. Damit sollte dann auch ein allgemeines Blinkverhalten für jedes Control erreichbar sein. Z.B. StatusStrip blinkt in rot/gelb, Statuslabel mit eigenem Intervall in Lila/Blau...
    Um an alle Sub-CEs zu kommen, nimmst Du die Items-Property des StatusStrips her. Für eine For-Schleife also:

    VB.NET-Quellcode

    1. For Each SubCE In DeinStatusStrip.Items.Cast(Of ToolStripItem)
    2. If TypeOf SubCE Is NameDeinerBlinkendenProgressBarKlasse Then WasAuchImmerMitDieserBlinkendenProgressBarGemachtWerdenSoll()
    3. If TypeOf SubCE Is NameDeinerBlinkendenToolStripLabelKlasse Then WasAuchImmerMitDiesemBlinkendenLabelGemachtWerdenSoll()
    4. Next
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ich würde das Ganze über ein Interface lösen. z.B.: IFlashing
    Dieses verlangt die Properties für die Farben, Interval und Enabled und eine Methode für den Ablauf des Tick Events.

    Danach würde jede Klasse (StatusStrip, StatusLabel, ...) dieses Interface implementieren welche "Blinken" soll.

    Danach kannst du durch alle Objekte welches IFlashing implementieren durchiteriieren und auf die Eigenschaften zugreifen

    VB.NET-Quellcode

    1. for each item in StatusStrip1.Items.OfType(Of IFlashing)
    2. item.TimInterval = 250
    3. item.EnableFlashing = True
    4. Next


    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!