VB - Timer mit Befehl länger anzeigen lassen

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    VB - Timer mit Befehl länger anzeigen lassen

    Hallo,

    leider stehe ich momentan auf dem Schlauch.

    Ich möchte einen Timer haben, wo der Befehl für einen längeren Zeitraum z.B 5 Sekunden angezeigt wird danach soll sich der Timer für 3 Sekunden ausschalten. Das soll sich dann immer selbstständig wiederholen.

    So meine ich es ungefähr: Wenn Timer an, dann führe den Befehl für 5 Sekunden aus, danach schalte dich für 3 Sekunden aus und wiederhole den Prozess wieder von Anfang an.

    Hat jemand einen Tipp wie man das in einem Code zusammenfasst?

    Über eine Antwort wäre ich sehr dankbar :)
    Was meinst du mit "Befehl anzeigen lassen"?

    Das mit den unterschiedlichen Zeiten kannst du lösen, indem du den Timer.Interval änderst.

    VB.NET-Quellcode

    1. Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
    2. If Timer1.Interval = 5000 Then
    3. Timer1.Interval = 3000
    4. Label1.Text = "Ich warte 3 Sekunden"
    5. Else
    6. Timer1.Interval = 5000
    7. Label1.Text = "Ich arbeite 5 Sekunden"
    8. End If
    9. End Sub
    Danke für die Antwort!

    Mit "Befehl" meine ich z.B rufe die MessageBox für 5 Sekunden auf und schließe Sie automatisch nach 3 Sekunden.

    Der Code müsste dann z.B nach deiner Hilfe so aussehen oder:
    If Timer1.Interval = 5000 Then
    Timer1.Interval = 3000
    Label1.Text = "Ich warte 3 Sekunden"
    Else
    Timer1.Interval = 5000
    MsgBox("Test", MsgBoxStyle.Information, "Test")
    End If

    Wenn das so richtig ist, dann bitte ich ebend noch um Rückmeldung.

    Vielen Dank im Voraus!

    CJ-VB schrieb:

    Wenn das so richtig ist, dann bitte ich ebend noch um Rückmeldung.
    Wenn es das tut, was Du willst, ist es richtig. Das musst Du entscheiden.
    Eine MessageBox kannst Du nicht für eine gewisse Zeit anzeigen, da musst Du Dir einen eigenen Dialog für erstellen, gugst Du Dialoge: Instanziierung von Forms und Aufruf von Dialogen
    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!
    Da eine MessageBox ein Modaldialog ist und auf eine Reaktion des Benutzers wartet, geht das so nicht. Irgendwo im Forum gab's dazu mal was, aber der einfachste Schritt ist, dass Du Dir ein MessageBox-like Form machst, welches jenen Timer beinhaltet und sich dann eben nach x Sekunden selbst wieder schließt. Es stellt sich auch die Frage, was passieren soll, wenn die Box angezeigt wird und der User was machen will. Muss dann die Box verschwinden? Ist da ein OK-Button drauf, der die Box verschwinden lässt und den Timer resettet? Insgesamt zuwenig Infos bisher.

    Gib mal bitte ein konkretes Beispiel, damit wir wissen in welche Richtung es geht. Weil: Alle 5 Sekunden soll für 3 Sekunden ne MessageBox aufploppen kommt mir auf Anhieb ziemlich nervtötend vor.
    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.

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

    Das mit der MessageBox war nur ein Beispiel!

    Um es hier konkret auszudrücken habe ich folgendes vor:
    Ich hab 2 Timer und einen Datagridview.

    Der erste Timer soll die Zeilen und Spalten "gelb" anzeigen (Das habe ich auch schon hinbekommen - Läuft!). Der zweite hat die Aufgabe (deswegen auch die Geschichte mit den 5 Sekunden und 3 Sekunden), wenn "Aufgabe Überfällig ist vom Datum her" dann sollst du diese Zeile die Überfällig ist "rot" aufleuchten, aber auch nur für 5 Sekunden danach sollst du für 3 Sekunden pause einlegen und danach wieder für 5 Sekunden "rot" aufleuchten.

    Das ist mein Hauptgedanke gewesen. Mehr konkreter kann ich das auch nicht beschreiben.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    @CJ-VB Ein Control bzw. Item soll blinken.
    Habe ich das richtig verstanden?
    Dazu brauchst Du einen Timer, nicht zwei.
    Mach das, wie von @HenryV beschrieben. Nur statt das Label zu betexten, änderst Du die Farbe des DGV, indem Du das DGV invalidisierst.
    Nutze das CellPainting-Event. Frage die aktuelle Zelle ab und ändere sie entsprechend, wenn sie dran ist.
    docs.microsoft.com/de-de/dotne…g?view=netframework-4.7.2
    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!

    CJ-VB schrieb:

    Das mit der MessageBox war nur ein Beispiel!
    Du siehst: Ungünstiges Beispiel, daher bitte (zukünftig) problemnah beschreiben.

    CJ-VB schrieb:

    Der erste Timer soll die Zeilen und Spalten "gelb" anzeigen
    Dazu braucht man aber keinen Timer, sondern verarbeitet die Daten entweder direkt nach dem Laden ins DGV oder wenn sich die Daten ändern. Wenn Du mit einem an eine BindingSource gebundenem DGV arbeitest, gibt es dafür das BindingSource.CurrentChanged-Event.

    CJ-VB schrieb:

    sollst du diese Zeile die Überfällig ist "rot" aufleuchten, aber auch nur für 5 Sekunden danach sollst du für 3 Sekunden pause einlegen und danach wieder für 5 Sekunden "rot" aufleuchten.
    Klingt wie Hausaufgaben. Aber ist wohl nur ein Klangfehler.

    RodFromGermany schrieb:

    CellPainting-Event
    ? Echt? Ich hät's so gemacht:

    VB.NET-Quellcode

    1. Private Enum MarkingStates
    2. Normal = 0
    3. Highligthed = 1
    4. End Enum
    5. Private CurrentState As MarkingStates = MarkingStates.Normal
    6. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    7. SwitchCurrentState()
    8. End Sub
    9. Private Sub SwitchCurrentState()
    10. If CurrentState = MarkingStates.Normal Then
    11. DataGridView1.Item(0, 0).Style.BackColor = Color.Yellow 'Item(0, 0) ist 1. Zeile, 1. Spalte. Welche "Koordinaten" korrekt sind, weißt Du besser als wir
    12. CurrentState = MarkingStates.Highligthed
    13. Timer1.Interval = 5000
    14. Else
    15. DataGridView1.Item(0, 0).Style.BackColor = Color.Red
    16. CurrentState = MarkingStates.Normal
    17. Timer1.Interval = 3000
    18. End If
    19. End Sub
    20. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    21. Timer1.Start()
    22. SwitchCurrentState()
    23. End Sub

    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.

    VaporiZed schrieb:

    Echt?
    Mehrere Wwege führen nach Rom. ;)
    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!