MetroAnimator für absolut jedes Controls auf einer Form benutzen

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    MetroAnimator für absolut jedes Controls auf einer Form benutzen

    Hallihallo,

    bin gerade dabei die Optik meines Projekts bisschen aufzuwerten und bin auf den MetroAnimator der MetroSuite aufmerksam geworden. Ich möchte dass der grafische Effekt für jedes Control auf der Form funktioniert. Hier mein Code:

    VB.NET-Quellcode

    1. ​Private Sub Hauptseite_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. For Each c As Control In Controls
    3. Dim animator As New MetroSuite.Components.MetroAnimator
    4. animator.ClickControl = c
    5. animator.Speed = 15
    6. Next
    7. End Sub


    Leider wird der Effekt so nur für die Steuerelemente angewandt, die direkt auf der Form liegen, und nicht für untergeordnete wie z.B. die innerhalb eines MetroTabControl. Hat jemand eine Ahnung wie ich die ansprechen kann?
    @kafffee Du legst für jedes einzelne Control eine MetroAnimator-Instanz an?
    Ist das so gedacht?
    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!
    Eine wunderbare Aufgabe um sie mittels Rekursion zu lösen.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    @RodFromGermany

    Weiss nicht ob das so gedacht ist. Das ist das einzige Codebeispiel, das ich gefunden hab. Habs auch schon probiert anders zu lösen, aber da ist mein Wissen noch nicht tief genug. Wenn man so viele Instanzen erzeugt geht das auf die Performance oder?

    Edit: Bei folgendem Code meckert der Editor zwar nicht, es passiert aber schlicht weg gar nichts:

    VB.NET-Quellcode

    1. For Each c In Controls
    2. MetroAnimator1.ClickControl = CType(c, Control)
    3. MetroAnimator1.Speed = 15
    4. MetroAnimator1.AnimationColor = Color.Black
    5. Next


    @mrMo

    Was ist eine Rekursion?

    Interessant wäre auch zu wissen, wie man einzelne Steuerelement-Typen davon ausnehmen kann. Bei ListBoxen z.B. wird kein Effekt erzeugt (wäre ja auch doof), aber leider entsteht ein leichtes Flickern, wenn man drauf klickt.

    GIbt es irgend ein ControlType oder so was in der Art, so dass man z.B. das hier machen könnte?:

    VB.NET-Quellcode

    1. For Each c In Me.TabPage1.Controls
    2. If c.ControlType <> ListBox Then
    3. Dim animator As New MetroSuite.Components.MetroAnimator
    4. animator.ClickControl = c
    5. animator.Speed = 15
    6. End If
    7. Next

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „kafffee“ ()

    VB.NET-Quellcode

    1. If c.GetType IsNot GetType(ListBox) Then


    kafffee schrieb:

    Was ist eine Rekursion?
    :huh: Rekursion; In diesem Fall: Code, der sich selbst aufruft. Damit das Ganze aber nicht in der Unendlichkeit (und somit in einem Stack Overflow) verläuft, muss z.B. durch eine Abbruchbedingung dafür gesorgt werden, dass der Code sich nicht ewig selbst aufruft.
    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.

    kafffee schrieb:

    geht das auf die Performance oder?
    Es wird ja wohl immer nur ein Contrrol auf ein Mal animiert, dann eher die Ressourcen.
    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!

    kafffee schrieb:

    also den Arbeitsspeicher...
    Performance-Änderung ist Gewinn oder Verlust an Abarbeitungsgeschwindigkeit.
    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!
    Ressourcenschonend? Nein. Codesparend: durchaus.
    Pseudocode

    Quellcode

    1. Prozedur WendeMetroAnimatorAnAuf(c As Control)
    2. Wende den MetroAnimator auf c an (?)
    3. Für jedes ChildControl von c
    4. Rufe Prozedur auf: WendeMetroAnimatorAnAuf(ChildControl)
    5. Nächstes ChildControl
    6. Prozedurende


    Und es beginnt (ggf.) mit WendeMetroAnimatorAnAuf(HauptForm)
    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.