VB Labeltext mit Timer öfter ändern

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Newman.

    VB Labeltext mit Timer öfter ändern

    Hallo !

    ich bin neu hier und probiere derzeit ein bischen in VB rum... heißt ich habe leider noch nicht soviel Erfahrung.
    Ich wollte fragen, ob es machbar wäre ein Labeltext mit hilfe von einem Timer öfters zu ändern?
    Heißt ich möchte den Labeltext von zum Beispiel "Hallo (3sek später) wie gehts dir (3sek später) heute?" (nur als Beispiel) ändern.
    Die Frage ist nur, ob das irgentwie mit nur einem Label und ein Timer möglich wäre?
    ... derzeit hatte ich es immer mit:

    Private Sub Timer1.Tick
    Label1.Text = ("Hallo")
    Label1.Text = ("wie gehts dir")
    Label1.Text = ("heute?")

    nur verschwindet so ja der "Neu" und "wie gehts dir" - Text immer direkt, heißt ich brauche irgentwie so eine art Befehl, der zwischen den Änderungen immer eine Art Pause ausführt. Ich weiß nicht
    ob so etwas möglich ist... bzw. ist das für euch bestimmt komplett die Anfängerfrage, aber ich komm nicht drauf... ?( ich würde das ganze auch gerne mit nur einem Label und einem Timer machen,
    sonst hab ich am Ende hundert Stück davon :D

    Vielen Dank und Liebe Grüße!
    Hallo und willkommen im Forum,

    Du könntest zum Beispiel hingehen und deine Texte in ein eindimensionales String-Array packen und diese dann im Timer durchgehen.

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim i As Integer = 0
    3. Dim mycontent(2) As String
    4. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    5. mycontent(0) = "Hallo"
    6. mycontent(1) = "Wie gehts dir?"
    7. mycontent(2) = "Was machst du heute?"
    8. End Sub
    9. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    10. Label1.Text = mycontent(i)
    11. i += 1
    12. End Sub
    13. End Class


    Hier werden globale Variablen verwendet - ich bin da kein Freund von.
    Und du müsstest natürlich überprüfen, ob der entsprechende Array-Eintrag überhaupt existiert.

    Falls du irgendwann tiefer in der Materie drin bist, dann kannst du die Aktion auch in einen eigenen Thread auslagern und diesen dann nach jeder Aktion für 3 Sekunden einfrieren.
    Willkommen im Forum.

    Newman schrieb:

    nur verschwindet so ja der "Neu" und "wie gehts dir" - Text immer direkt
    "Neu"? Du meinst "Hallo", oder?

    Ja, das geht. Dazu mach Dir ne Variable, die Du außerhalb von Timer1_Tick deklarierst und innerhalb erhöhst:

    VB.NET-Quellcode

    1. Private IndexOfTextToShow As Integer = 0
    2. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    3. Select Case IndexOfTextToShow
    4. Case 0: Label1.Text = ("Hallo")
    5. Case 1: Label1.Text = ("wie gehts dir")
    6. Case 2: Label1.Text = ("heute?")
    7. End Select
    8. IndexOfTextToShow += 1
    9. End Sub


    btw: bitte CodeTags verwenden und echten Code posten. Private Sub Timer1.Tick ist syntaktisch falsch.

    Oh, da war jemand schneller. Aber kleiner Einwand zu Deinem globale-Variablen-Einwand, @MH_EP: Das ist keine globale Variable. Das ist ne normale Klassenvariable.
    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 Meines Wissens nach sind Klassenvariablen globale Variablen, auch wenn sie nur innerhalb der Klasse gelten. Aber verbessere mich bitte, falls ich falsch liege.
    Nee, ne Klassenvariable ist ne Klassenvariable. Also nur innerhalb der Klasse sichtbar, in der sie Private deklariert wurde. Wenn man sie Public deklariert, ja okay, selber schuld. Deswegen sollte man sowas lassen. Aber sie wäre immer noch an eine Klasseninstanz gebunden. Ne echte globale Variable ist sowas hier:

    VB.NET-Quellcode

    1. Public Module UsableByAnyone
    2. Public ChangeMeIfYouLike As Integer
    3. End Module


    Da kann man dann überall schreiben ChangeMeIfYouLike = 42

    ##########

    global heißt ja: Von über einseh- und ggf. änderbar, eben auch außerhalb der Klasse, in der sie deklariert wurde (falls es eine Klassenvariable ist).
    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“ ()

    VaporiZed schrieb:

    IndexOfTextToShow += 1
    Wenn Du dann noch im Case Else reinschreibst IndexOfTextToShow = -1 läuft die Sache rund.
    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!
    Die Sache läuft auch so rund. Wenn der Zähler > 2 ist, wird einfach nix anderes mehr angezeigt. Ok, bei 3 Sekunden Wartezeit kommt es nach Integer.MaxValue * 3 Sekunden (also nach ca. 74500 Jahren) zu ner OverflowException, aber sonst?
    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:

    wird einfach nix anderes mehr angezeigt.
    Das hatte ich im Hinterkopf, denn ich habe von @Newman Spekulatius genascht und glaube, dasser durchzählen will.
    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!