Versuche mit Timer und Tempo

  • VB.NET
  • .NET (FX) 4.0

Es gibt 30 Antworten in diesem Thema. Der letzte Beitrag () ist von toto.

    Versuche mit Timer und Tempo

    Hallo Gemeinde,
    ich habe in ein FLP 10 Label die ich zur Laufzeit hinzufüge.

    Ich möchte das nach gegebene Zeit in Timer die Label
    nacheinander die Farbe ändern. Folgend habe ich schon Versucht nachdem Frau G nichts hergegeben hat:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Timer1.Interval = 500
    3. Timer1.Start()
    4. End Sub
    5. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    6. For i As Integer = 0 To (ListView2.Items.Count - 1)
    7. FLP1.Controls("Label" & i).BackColor = Color.FromArgb(70, Color.Yellow)
    8. Next
    9. 'Timer1.Stop()
    10. End Sub


    Fehler Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

    Was mache ich falsch?
    Ich bitte um ein wenig Hilfe
    Vielen Dank im Voraus
    lg toto
    @toto Mach Dir ein UserControl mit all Deinen gewünschten Eigenschaften und füge dies dem FLP hinzu.
    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!
    @Rodarkdie label habe ich schon.
    Jetzt soll nach timer start der erste gelb werden, nach ablauf der Zeit
    soll der ertste wieder seine ursprüngliche Farbe bekommen und der zweite soll gelb werden, usw.

    Ein eigener Control ändert nichts an der Schleife.
    Oder geht es anders?
    lg toto
    @toto Lass das mit dem UserControl.
    Ich denke mal, dass er hier ins Nirvana greift:

    VB.NET-Quellcode

    1. FLP1.Controls("Label" & i).BackColor = Color.FromArgb(70, Color.Yellow)
    Klär das mal auf.
    Wenn die Label dynamisch erstrellt sind, ist deren Name gewiss nicht "Label42" oder so.
    Was soll ühaupt die Schleife im Timer?
    Wenn immer alle Label transparent gelb sind, kannst Du das sofort beim Erstellen des Labels machen.
    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!
    @ Rod sie sollen nacheinander gelb werden in den eingestellte Zeit im Timer

    hier der Code für die Labels:

    VB.NET-Quellcode

    1. For i = 0 To (ListView2.Items.Count - 1)
    2. Label = New Label
    3. Label.Tag = +1
    4. Label.Size = New Size(150, 50)
    5. Label.BorderStyle = BorderStyle.FixedSingle
    6. 'Label.BackColor = Color.Transparent
    7. Label.Margin = New Padding(3, 3, 3, 3)
    8. Label.Font = New Font("Bahnschrift SemiBold SemiConden", 16)
    9. Label.TextAlign = ContentAlignment.MiddleLeft
    10. 'Label.BackColor = Color.FromArgb(70, Color.Yellow)
    11. FLP1.Controls.Add(Label)
    12. Label.Text = ListView2.Items.Item(i).Text
    13. 'FLP1.ResumeLayout()
    14. Next

    Ich versuche damit, eine Art Metronome, wenn der erste Akkord gespielt ist soll der Label den Zweiten gelb anzeigen und den erste wieden seine ursprüngliche Farbe bekommen, usw, wie gesagt es ist ein Versuch.

    Ich bekomme sie jetzt alle Gelb aber gleichzeitig.
    Das Nacheinander bekomme ich nicht hin
    lg toto

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

    <edit>
    Du musst deinem Label einen Namen zuweisen, sonst funktioniert das dynamische Ansprechen nicht.
    </edit>

    Ich würde etwa so lösen:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form11
    2. Dim CurrentLabelIndex As Integer = 0
    3. Dim LabelCount As Integer
    4. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    5. LabelCount = FLP1.Controls.Count
    6. If LabelCount = 0 Then
    7. Timer1.Stop()
    8. Exit Sub
    9. End If
    10. FLP1.Controls("Label" & CurrentLabelIndex).BackColor = Color.FromArgb(70, Color.Yellow)
    11. If CurrentLabelIndex = 0 Then
    12. FLP1.Controls("Label" & LabelCount - 1).BackColor = SystemColors.Control
    13. Else
    14. FLP1.Controls("Label" & CurrentLabelIndex - 1).BackColor = SystemColors.Control
    15. End If
    16. CurrentLabelIndex += 1
    17. If CurrentLabelIndex = LabelCount Then
    18. CurrentLabelIndex = 0
    19. End If
    20. End Sub
    21. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    22. Timer1.Interval = 500
    23. Timer1.Start()
    24. End Sub
    25. Private Sub Form11_Load(sender As Object, e As EventArgs) Handles Me.Load
    26. For i As Integer = 0 To 9
    27. Dim lb As New Label With {
    28. .Name = "Label" & i.ToString,
    29. .Text = "Label" & i.ToString
    30. }
    31. FLP1.Controls.Add(lb)
    32. Next
    33. End Sub
    34. End Class
    Hallo HenryV
    Danke fürdie Umsetzung, es funzt wie soll.

    Eine Frage noch, wie kann ich die größe der Labels ändern
    da ich deine " With" Anweisung mit den Klammer nicht kenne,
    Habe Versucht .Size = New Size..... Size wird blau unterstriechen

    Und wie geht das wenn der letzte lb durchlaufen ist das der Timer stoppt?
    lg toto

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „toto“ ()

    @toto Sagte ich bereits:

    RodFromGermany schrieb:

    ist deren Name gewiss nicht "Label42" oder so.
    @HenryV hat es erkannt.
    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!
    @toto Hast Du nun erkannt, was bei Dir falsch gelaufen ist?
    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!
    @Rod jetzt schon
    @HenryV Danke

    Und wie geht das wenn der letzte lb durchlaufen ist das der Timer stoppt?


    damit Verschwindet das Gelb beim Vorletzten Label

    VB.NET-Quellcode

    1. CurrentLabelIndex += 1
    2. If CurrentLabelIndex = LabelCount Then
    3. CurrentLabelIndex = 0
    4. FLP1.Controls("Label" & LabelCount - 1).BackColor = SystemColors.Control
    5. Timer1.Stop()
    6. End If
    lg toto
    @toto Ja und?
    Schon mal mit Debuggen versucht?
    Debuggen, Fehler finden und beseitigen
    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!
    @Rod ja habe schon versucht

    VB.NET-Quellcode

    1. If CurrentLabelIndex = LabelCount Then

    CurrentLabelIndex =17
    LabelCount =17

    VB.NET-Quellcode

    1. CurrentLabelIndex = 0

    CurrentLabelIndex=17 wird aber auf Null gesetzt

    VB.NET-Quellcode

    1. FLP1.Controls("Label" & LabelCount - 1).BackColor = SystemColors.Control

    Das Habe ich herausgenommen, bleibt aber auf dem letzten Label stehen (also Gelb) sollte aber wieder den SystemColor annehmen

    VB.NET-Quellcode

    1. Timer1.Stop()

    das habe ich eingefüt weil mit dem obere Timer.Stop ist weiter gelaufen, also von Vorne

    Ich weiß nicht mehr weiter

    Also wenn der letzte Label Gelb wird nach ablauf der Zeit soll SystemColors.Control haben und timer stop

    Und das ist der letzte Punkt dann funzt wie sein sollte
    lg toto

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „toto“ ()

    @toto Poste mal so viel Code, dass ich das ohne nachzufragen nachstellen kann.
    Wenn Du das Projekt postest, entferne in der ZIP die Ordner bin, obj und vb, die müllen den VBP-Server voll.
    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!

    VB.NET-Quellcode

    1. Dim CurrentLabelIndex As Integer = 0
    2. Dim LabelCount As Integer
    3. Dim lb As New Label
    4. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    5. LabelCount = FLP1.Controls.Count
    6. If LabelCount = 0 Then
    7. Timer1.Stop()
    8. Exit Sub
    9. End If
    10. FLP1.Controls("Label" & CurrentLabelIndex).BackColor = Color.FromArgb(80, Color.Yellow)
    11. If CurrentLabelIndex = 0 Then
    12. 17:
    13. FLP1.Controls("Label" & LabelCount - 1).BackColor = SystemColors.Control
    14. Else
    15. FLP1.Controls("Label" & CurrentLabelIndex - 1).BackColor = SystemColors.Control
    16. End If
    17. CurrentLabelIndex += 1
    18. If CurrentLabelIndex = LabelCount Then
    19. CurrentLabelIndex = 0
    20. Timer1.Stop()
    21. 'FLP1.Controls("Label" & CurrentLabelIndex - 1).BackColor = SystemColors.Control
    22. End If
    23. End Sub
    24. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    25. Timer1.Interval = 300
    26. Timer1.Start()
    27. End Sub
    lg toto
    @toto Ich muss nachfragen. X(
    Erstell ein neues Projekt und füge den Code eben da rein.
    Sorge dafür, dass Dein Effekt reproduziert wird.
    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!

    toto schrieb:

    Ich bitte um Tipps damit ich weiter machen kann
    Bearbeite mal Post #17.
    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!