Einblenden, Ausblenden, Countdown .... auf Befehl

  • VB.NET

Es gibt 50 Antworten in diesem Thema. Der letzte Beitrag () ist von VBHunter.

    Okay das mit "CASE" hatte ich auch gelesen das es besser sein soll satt "IF". Hab das mal geändert wenn du es empfehlst :D

    Ja das mit die anderen (Kuendigung1,2,3,4...)hatte ich erst nach absenden meiner Nachricht eingefügt deshalb stand es noch nicht hinter :)

    ?( er sagt mir ich Soll die noch Deklarieren (Kuendigung1...etc) sind die nicht mit der Enum methode Deklariert?

    Am Click Arbeite ich noch und komm da noch nicht ganz weiter bis auf das "t" mit rein muss

    VB.NET-Quellcode

    1. Private Sub KleinesLagerKuendigen_Button_Click(sender As Object, e As EventArgs) Handles KleinesLagerKuendigen_Button.Click
    2. FullTime = New TimeSpan(0, 0, 10)
    3. Bau_Countdown = t 'Das ist bestimmt falsch :(
    4. Produktionsname1.Text = "Kündigungsfrist KL"
    5. Produktionsname1.Visible = True
    6. Pbar1.Visible = True
    7. lbl_Countdown_Label.Visible = True
    8. Set_Countdown(FullTime)
    9. Bau_Countdown.Start()
    10. End Sub


    EDIT:
    zu meiner Frage
    er sagt mir ich Soll die noch Deklarieren (Kuendigung1...etc) sind die nicht mit der Enum methode Deklariert?


    habe ich es abgeändert in:

    VB.NET-Quellcode

    1. Select Case Currentwork
    2. Case Testaction.Kuendigung1 'abgeändert
    3. RestlicheZeit -= TimeSpan.FromMilliseconds(Bau_Countdown.Interval)


    Ist das auch plausiebel?

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

    Hallo
    Hehehe, erwischt.

    Bau_Countdown = t Warum willst den den Timer neu erstellen? Kann ganz weg?
    Du musst ein wenig logisch denken. Warum sollst du den Timer neu Initialisieren, machst du ja im Load, und fertig.

    Wegen dem Enumerator im Select Case:

    Erwischt. Ich habe geschrieben das ich den aus dem Gedächtnis geschrieben habe damit du evtl. versuchst von selber auf den Fehler zu kommen den ich eingebaut habe um zu sehen ob du versuchst zu lernen und Fehler auszubessern.

    Es muss Case Testaction.Kuendigung1 hin.

    Setzen 5 !

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hallo

    ​Ne, das war ja von Anfang an dein Fehler. Die neuzuweisung des Timer`s hatte ich ja nicht im Code.
    ​Der Test war der Enumerator im Select Case, den haste versemmelt.

    ​Aber macht, nix. Du wirst da schon machen. Wie gesagt, immer ein wenig nachdenken bevor man die Flinte ins Korn wirft.

    Grüße
    ​Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    So habs jetzt soweit hin bekommen.

    nur noch...

    Timer1 läuft bei klick auf Button1. Timer2 fängt auch an bei klick auf Button2. Aber Timer1 wird dan angehalten.... genauso ungedreht

    Click:

    VB.NET-Quellcode

    1. Currentwork = Testaction.Kuendigung0
    2. FullTime = New TimeSpan(0, 0, 10)
    3. Produktionsname1.Text = "Kündigungsfrist KL"
    4. Produktionsname1.Visible = True
    5. Pbar1.Visible = True
    6. lbl_Countdown_Label.Visible = True
    7. Set_Countdown(FullTime)
    8. Bau_Countdown.Start()


    und

    VB.NET-Quellcode

    1. Private Enum Testaction As Integer
    2. Kuendigung0 = 0
    3. Kuendigung2 = 2
    4. End Enum
    5. Private Currentwork As Testaction
    6. Sub Set_Countdown(ByVal Span As TimeSpan) 'Countdown zum Bau
    7. 'Bau_Countdown.Stop()
    8. RestlicheZeit = Span
    9. lbl_Countdown_Label.Text = RestlicheZeit.ToString()
    10. End Sub
    11. Private Sub Bau_Countdown_Tick(sender As Object, e As EventArgs) Handles Bau_Countdown.Tick 'Timer 1
    12. Select Case Currentwork
    13. Case 0
    14. RestlicheZeit -= TimeSpan.FromMilliseconds(Bau_Countdown.Interval)
    15. lbl_Countdown_Label.Text = RestlicheZeit.ToString
    16. Pbar1.Value = CInt(100 - ((RestlicheZeit.TotalMilliseconds / FullTime.TotalMilliseconds) * 100))
    17. If RestlicheZeit <= New TimeSpan(0) Then
    18. Bau_Countdown.Stop()
    19. Pbar1.Value = 0
    20. Produktionsname1.Visible = False
    21. Pbar1.Visible = False
    22. lbl_Countdown_Label.Visible = False
    23. End If
    24. Case 2
    25. RestlicheZeit -= TimeSpan.FromMilliseconds(Bau_Countdown.Interval)
    26. lbl2_Countdown_Label.Text = RestlicheZeit.ToString
    27. Pbar2.Value = CInt(100 - ((RestlicheZeit.TotalMilliseconds / FullTime.TotalMilliseconds) * 100))
    28. If RestlicheZeit <= New TimeSpan(0) Then
    29. Bau_Countdown.Stop()
    30. Pbar2.Value = 0
    31. Produktionsname2.Visible = False
    32. Pbar2.Visible = False
    33. lbl2_Countdown_Label.Visible = False
    34. End If
    35. End Select
    36. End Sub


    EDIT: hab den Code mal gekürzt ich brauche ja garnicht mehr die zweite "Sub Set_Countdown"

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

    Wie jetzt. Jetzt hast du doch 2 Timer? Oder meinst du 2 Routinen welchen das selbe Timer Object verwenden?

    Ich blick jetzt gar nicht mehr durch was du machen willst.
    ​Sollen beide Routinen gleichzeitig laufen können? Wenn ja dann bräuchtest du zwei Timer Objekte.

    Sorry, ich kann ich nicht den ganzen Code schreiben. Du weist wie es geht. Haben wir durchgemacht. Jetzt erstelle deine Objekte und lasse sie so durchlaufen wie du es willst.
    Setzte Haltepunkte und schau dir die Werte an. Google evtl wie man richtig Debuggt.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Sie sollen gleichzeitig laufen können klickt xy auf Kündigen1 dann geht die Pbar1 los mit timer usw ... klickt er jetzt noch auf Kündigen2 soll die zweite Pbar2 los gehen und beide seperat laufen .....

    glaube mir ich lese und schaue den ganzen Tag
    Hallo

    ​und beide seperat laufen

    Und auch gleichzeitig fertig werden?
    ​Wenn beide 10 Sekunden laufen würden und der zweite wird erst aktiviert ca. in der hälfte der Zeit, sollen diese dann trotzdem gleichzeitig fertig werden oder der zweite erst 5 Sekunden nach dem ersten?

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hm ich glaub du verstehst mein prinzip nicht ;(

    Ich Baue ein Spiel. Nehme jetzt mal ein anderes Beispiel:

    Ich klicke auf Fabrik Stufe 1 Bauen mit dem Button1 diese Fabrik benötigt 3 Stunden bis die fertig gebaut ist .....
    wenn man jetzt noch ein Kraftwerk Bauen will mit Button2. Das benötigt 1 Stunde aber soll paralell laufen

    Label1.text.(Name des Bauens z.b. Fabrik) .... PBar1(Lade BAR) .... Label2(timer).text.
    Label2....
    Label3
    usw.

    hoffe kannst es nachvollziehen :huh:

    Hier mal Bilder einer neu erstellten TestForm:
    Ohne Debug


    Im Debug,.... ich habe auf Kraftwerk bauen geklickt ..... Timer läuft. Würde ich jetzt auf Fabrik bauen klicken, dann bleibt der andere stehen
    Hallo

    Wenn es ein Spiel werden soll musst du sowieso viel lernen.
    Ich habe dir hier jetzt mal was erstellt wo ich denke das du versuchen solltest den Code zu verstehen.
    Ich habe das ganze jetzt dynamischer erstellt. So kannst du mit zwei zeilen Code ein Neues Object erstellen (z.b. ein Schwimmbad)

    Ist natürlich nicht perfekt, habe ich nur schnell mal runtergetippt.
    Schau mal rein und versuche das zu verstehen.

    Grüße
    Sascha
    Dateien
    • WindowsApp1.zip

      (236,15 kB, 64 mal heruntergeladen, zuletzt: )
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Ja Genau das ist es :thumbsup:

    Das ist sehr hilfreich, ich muss mal versuchen zu verstehen wie du es ohne Ticker bin bekommen hast, aber das ist genau das was ich wollte. Bist der Beste !

    Ich schreib das jetzt mal um, mal schauen ob es klappt
    Sind Timer drinnen. Schau in die eine Klasse was dabei ist. Die kümmert sich um alles.
    Schön ausgelagert.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Ne, es ist ja kein Control.
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    So hab jetzt die ganze zeit daran rumgebastelt und hab jetzt zwar bei klick die Uhrzeit drin stehen aber er zählt nicht runter :/

    Ich hab die PBar geändert in meine eigene und habe eine weitere zeile eingefügt zum ausgeben der Zeit.... (restzeit)

    Das ist jetzt die BuildTimerObject:

    VB.NET-Quellcode

    1. Private _progressBar As Pbar
    2. Private RestlicheZeit As TimeSpan
    3. Private FullTime As TimeSpan
    4. Sub Set_Countdown(ByVal Span As TimeSpan) 'Countdown zum Bau
    5. RestlicheZeit = Span
    6. End Sub
    7. Public Sub New(timername As String, resttime As String, timetocompleteSeconds As Integer, flowPanel As FlowLayoutPanel)
    8. Timer = New Timer() With {.Interval = 1000, .Enabled = True}
    9. AddHandler Timer.Tick, AddressOf Timer_Tick
    10. CreateCluster10(timername, resttime, timetocompleteSeconds, flowPanel)
    11. StartetAt = Now
    12. RunsOutAt = DateAdd(DateInterval.Second, timetocompleteSeconds, Now)
    13. Timer.Start()
    14. End Sub
    15. Private Sub CreateCluster10(timername As String, resttime As String, timetocompleteSeconds As Integer, flowPanel As FlowLayoutPanel)
    16. Dim fp2 As New FlowLayoutPanel
    17. fp2.FlowDirection = FlowDirection.TopDown
    18. fp2.Controls.Add(New Label() With {.Text = timername}) ', .Width = 100})
    19. fp2.Controls.Add(New Label() With {.Text = resttime}) ', .Width = 100})
    20. _progressBar = New Pbar
    21. fp2.Controls.Add(_progressBar)
    22. flowPanel.Controls.Add(fp2)
    23. End Sub
    24. Public Property Timer As Timer
    25. Private Property StartetAt As DateTime
    26. Private Property RunsOutAt As DateTime
    27. Private Sub Timer_Tick()
    28. Dim completTimeSpan As Integer = DateDiff(DateInterval.Second, StartetAt, RunsOutAt)
    29. Dim resttime As Integer = DateDiff(DateInterval.Second, Now, RunsOutAt)
    30. Dim percentValue As Double = ((completTimeSpan - resttime) * 100) / completTimeSpan
    31. If percentValue >= 100 Then
    32. _progressBar.Value = 100
    33. Else
    34. _progressBar.Value = percentValue
    35. End If
    36. End Sub


    mein Klick:

    VB.NET-Quellcode

    1. Private Sub KleinesLagerKuendigen_Button_Click(sender As Object, e As EventArgs) Handles KleinesLagerKuendigen_Button.Click
    2. Dim t = New BuildTimerObject("Fabrik wird gebaut ", "" & Now.ToLongTimeString, Fabrikbauzeit, Me.FlowPanel1)
    3. _timers.Add(t)
    4. End Sub
    Wo soll ich Anfangen:

    Wenn du deinen Code säuberst und Stück für Stück durchgehst wirst du den Fehler finden.

    VB.NET-Quellcode

    1. Public Sub New(timername As String, resttime As String, timetocompleteSeconds As Integer, flowPanel As FlowLayoutPanel)

    Warum Resttime übergeben? Brauchst du nicht wenn du in der Klasse alle notwendigen Angaben hast.

    Die kannst du berechnen wie ich, im Time_Tick mit DateDiff(DateInterval.Second, Now, RunsOutAt)

    VB.NET-Quellcode

    1. Sub Set_Countdown(ByVal Span As TimeSpan) 'Countdown zum Bau
    2. RestlicheZeit = Span
    3. End Sub

    Was macht das in der Klasse?
    Wird nirgens verwendet!! Raus damit.

    VB.NET-Quellcode

    1. _progressBar = New Pbar

    Ich kenne deine Progressbar nicht, weis nicht was die macht.

    Achja, hatte ich vergessen: unter _progressBar.Value = 100 muss noch ein Timer.Stop rein.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Puh ist nicht einfach .... weil sich einfach wenig ändert wenn ich dinge hinzufüge.

    aber diese spalte ist ja schon mal korrekt oder?

    VB.NET-Quellcode

    1. fp2.Controls.Add(New Label() With {.Text = resttime}) ', .Width = 100})


    weil dann zeigt er mir zumindest die Zeit an.... nur halt die 80 sekunden der form statt dieses format 00:01:20 .... und runterzählen soll er ja, steht aber still
    das mit dem set_Countdown war ein versuch die berechnung zu starten als TimeSpan wie in mein anderen Beispiel wo es ja ging.

    Das ist meine Pbar:


    Ich versuche die ganze zeit schon die berechnung im Tick zu packen aber immer ohne erfolg....

    VB.NET-Quellcode

    1. Dim resttime As Integer = DateDiff(DateInterval.Hour.Minute.Second, Now, RunsOutAt)


    da zeigt er grün unterstrichen fehler (also geht zu Debuggen aber ohne reaktion)
    Hallo

    Nummer 1: Du must meine Posts lesen und versuchen zu verstehen (!!).
    Ich habe oben schon geschrieben das du das mit resttime lassen sollst. Du hast ja die werte bereits in StartetAt und RunsOutAt.
    Du musst nur die Zeit anhand der beiden Werten berechnen wie du ja im Codeschnippsel unten eh hast.

    Aber..... Wenn du 1 x die Zeit in ein Label schreibst kann das doch gar nicht Updaten. Du schreibst beim erstellen des Label die Restzeit hinein. Und?
    Wo hast du den Code welcher diesen Wert Updated?? Das muss ja im Tick passieren! Wie gesagt, wir können jetzt Wochenlang hier schreiben, aber ich bau dir sicher nicht dein Spiel.
    Du MUSST den Code den du da kopierst verstehen. Und sag nicht das du den nicht mit Copy & Paste einfügst, ich hab dich ja bereits erwischt.

    So, ich mach dir das nochmals aber du musst echt versuchen zu VERSTEHEN was da passiert.
    Diesmal aber als Bild, dann kannst nicht kopieren :whistling:
    Bilder
    • Spiel1.PNG

      4,37 kB, 383×198, 50 mal angesehen
    • Spiel2.PNG

      102,53 kB, 1.406×885, 69 mal angesehen
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Also zum teil hatte ich das in meinen versuch schonmal so gehabt X/

    Aber ich glaub zu dieser lösung wäre ich nie gekommen. ;(

    Aber vielen dank für deine hilfe dennoch muss ich mich mehr damit beschäftigen.
    Hallo

    ​Tipp: Kauf dir ein Buch. Nix Online. Ein Buch ist viel mehr Wert. (Zumindest ein e-Book).
    Die Grundlagen musst du wissen, sonst kommst du nicht weit und ohne Erfolgserlebnissen machts nicht lange spaß.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##