Einblenden, Ausblenden, Countdown .... auf Befehl

  • VB.NET

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

    Einblenden, Ausblenden, Countdown .... auf Befehl

    Hey Leute,

    ich komme nicht weiter, vieleicht könnt ihr mit etwas helfen.

    Hier mal mein Bild zum ersten einblick:


    Also ich möchte das wenn man Links auf den Button klickt das oben Rechts bei Produktion. Das was darunter ist automatisch erscheint. Quasi ist es zu beginn unsichtbar.
    Jetzt kommts noch. Da wo Produktionsname (Label) steht, soll dann XY stehen was vom Button kommt z.b. "Wartezeit Kündigung KL" in der mitte habe ich eine Pb 1 - 100 % und rechts daneben einen Countdown, der dann 30 Minuten runterzählt, und wenn er bei 0 ist, soll er etwas ausführen (in ein Label YX Summe gutschreiben) und das ganze von oben rechts wieder entfernen oder unsichtbar machen.

    PS: es handelt sich um ein Spiel

    Ich hoffe ihr könnt mir Helfen

    EDIT:
    Das hab ich bis jetzt hinbekommen:

    VB.NET-Quellcode

    1. Private Sub Zeit3_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. Set_Countdown(New TimeSpan(0, 0, 10))
    3. End Sub
    4. Sub Set_Countdown(ByVal Span As TimeSpan)
    5. Bau_Countdown.Stop()
    6. RestlicheZeit = Span
    7. lbl_Countdown_Label.Text = RestlicheZeit.ToString()
    8. End Sub
    9. Private Sub Bau_Countdown_Tick(sender As Object, e As EventArgs) Handles Bau_Countdown.Tick
    10. RestlicheZeit -= New TimeSpan(0, 0, 1)
    11. Bauname.Text = "Kündigungsfrist KL"
    12. lbl_Countdown_Label.Text = RestlicheZeit.ToString()
    13. Pbar1.Value += 1
    14. If Pbar1.Value = 100 Then
    15. Pbar1.Value = 0
    16. End If
    17. If RestlicheZeit = New TimeSpan(0) Then
    18. Bau_Countdown.Stop()
    19. End If
    20. End Sub


    Wenn ich jetzt auf den Button klicke dann Zählt der countdown runter (10 Sek) aber die PBar zählt bis 10 % hoch und bleibt stehen :(
    Der name wird auch angezeit

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

    Hallo

    VBHunter schrieb:

    aber die PBar zählt bis 10 % hoch und bleibt stehen


    Klar, du zählst bei der PBar ja auch nur um den Faktor 1 Hoch. Wenn die ein Maximum von 100 hat sind das 10%.
    Objekte Sichtbar oder unsichtbar kannst du mit lblTest.Visible = false oder true.

    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. ##

    Danke für deine Antwort...

    Ja ich will ja 100 % erhalten wenn er zeit 0 erreicht hat ... muss ich jetzt bei jeder zeit(z.b. 10 Sek = Faktor 10) den Faktor berechnen oder geht das irgendwie zu Deklarieren.

    Mit dem unsichtbar.... das hab ich Probiert funktioniert ja aber ich würde eventuell das mit dem automatisch hinzufügen und entfernen bevorzugen da ich ja sonst eine zu lange liste machen müsste mit PBars
    Hallo

    VBHunter schrieb:

    Ja ich will ja 100 % erhalten wenn er zeit 0 erreicht hat

    Ja, das ist mir schon klar, du zählst aber immer nur eines hoch. In welchem Interval dein Timer läuft hast du nicht verraten. Wenn es eine Sekunde ist und du als 'RestlicheZeit' 10 Sekunden angibst dann kann dabei nur 10% rauskommen, denn danach stoppst du ja den Timer mit Bau_Countdown.Stop().

    Tipp: Damit du Flexibel bist wenn sich die Zeit oder das Interval ändert berechne es in Prozent und stelle den MinValue der PBar auf 0 und Max auf 100.

    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. ##

    Deine Flexi methode hört sich gut an. Kannst du mir vieleicht ein beispiel bauen aus meinen Code?
    hänge da total fest.

    Ich will ja angeben das Button X 30 Minuten braucht, Button Y 60 Minuten .....

    EDIT:
    Ich habe auch noch ein Code wie ich ein zusatzbutton / die leiste da oben hin bekomme, jedoch wie bekomm ich die YX masse raus und wie entfernt es sich nach Zeitablauf wieder?

    VB.NET-Quellcode

    1. Dim a As Label
    2. Dim Y As Integer = Button1.Location.Y
    3. Dim X As Integer = Button1.Location.X
    4. For Each T As Control In Me.Controls
    5. If TypeOf T Is Label AndAlso T.Location.Y > Y Then Y = T.Location.Y
    6. 'Next
    7. a.Parent = Me
    8. a.Location = New Point(Button1.Location.X, Y + 40)
    9. Me.Controls.Add(a)
    10. cb_IstNull.Checked = True


    Beispielcode klick auf Button und ein Label wird darunter Produziert

    Dann gib mal den ganzen Code der Form in einen Spoiler.

    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. ##

    Form Start:

    VB.NET-Quellcode

    1. Dim RestlicheZeit As TimeSpan


    Bei Klick:

    VB.NET-Quellcode

    1. Private Sub KleinesLagerKuendigen_Butten_Click(sender As Object, e As EventArgs) Handles KleinesLagerKuendigen_Button.Click
    2. Bau_Countdown.Start()
    3. End Sub


    Ticker & Loader

    VB.NET-Quellcode

    1. Private Sub Zeit3_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. Set_Countdown(New TimeSpan(0, 0, 10))
    3. End Sub
    4. Sub Set_Countdown(ByVal Span As TimeSpan)
    5. Bau_Countdown.Stop()
    6. RestlicheZeit = Span
    7. lbl_Countdown_Label.Text = RestlicheZeit.ToString()
    8. End Sub
    9. Private Sub Bau_Countdown_Tick(sender As Object, e As EventArgs) Handles Bau_Countdown.Tick
    10. RestlicheZeit -= New TimeSpan(0, 0, 1)
    11. Bauname.Text = "Kündigungsfrist KL"
    12. lbl_Countdown_Label.Text = RestlicheZeit.ToString()
    13. Pbar1.Value += 1
    14. If Pbar1.Value = 100 Then
    15. PB_Countdown.Stop()
    16. Pbar1.Value = 0
    17. End If
    18. If RestlicheZeit = New TimeSpan(0) Then
    19. Bau_Countdown.Stop()
    20. End If
    21. End Sub


    Event wenn Countdown abgelaufen ist, wird hier eine CheckBox aktiviert:

    VB.NET-Quellcode

    1. Event Countdown_Abgelaufen()
    2. Sub Abgelaufen() Handles MyClass.Countdown_Abgelaufen
    3. Dim a As Label
    4. Dim Y As Integer = Button1.Location.Y
    5. Dim X As Integer = Button1.Location.X
    6. For Each T As Control In Me.Controls
    7. If TypeOf T Is Label AndAlso T.Location.Y > Y Then Y = T.Location.Y
    8. 'Next
    9. a.Parent = Me
    10. a.Location = New Point(Button1.Location.X, Y + 40)
    11. Me.Controls.Add(a)
    12. cb_IstNull.Checked = True
    13. End Sub

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

    Hallo

    ​Evtl. musst du es etwas anpassen aber das hier: ​Pbar1.Value = 100 - ((RestlicheZeit.TotalMilliseconds / FullTime.TotalMilliseconds) * 100) macht das ganze jetzt als Prozentsatz.

    So sieht mein Tick aus:

    VB.NET-Quellcode

    1. ​ RestlicheZeit -= TimeSpan.FromMilliseconds(Bau_Countdown.Interval)
    2. Bauname.Text = "Kündigungsfrist KL"
    3. lbl_Countdown_Label.Text = RestlicheZeit.ToString
    4. Pbar1.Value = 100 - ((RestlicheZeit.TotalMilliseconds / FullTime.TotalMilliseconds) * 100)
    5. If RestlicheZeit <= New TimeSpan(0) Then
    6. Bau_Countdown.Stop()
    7. Pbar1.Value = 0
    8. End If


    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. ##

    Oh, Sorry. Ich dachte das mit FullTime erklärt sich von selbst.
    ​Hier mein ganzer vereinfachter Test

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private RestlicheZeit As TimeSpan
    2. Private FullTime As TimeSpan
    3. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    4. Bau_Countdown.Interval = 100
    5. FullTime = New TimeSpan(0, 0, 10)
    6. End Sub
    7. Private Sub KleinesLagerKuendigen_Click(sender As Object, e As EventArgs) Handles KleinesLagerKuendigen.Click
    8. Set_Countdown(FullTime)
    9. Bau_Countdown.Start()
    10. End Sub
    11. Sub Set_Countdown(ByVal Span As TimeSpan)
    12. Bau_Countdown.Stop()
    13. RestlicheZeit = Span
    14. lbl_Countdown_Label.Text = RestlicheZeit.ToString()
    15. End Sub
    16. Private Sub Bau_Countdown_Tick(sender As Object, e As EventArgs) Handles Bau_Countdown.Tick
    17. RestlicheZeit -= TimeSpan.FromMilliseconds(Bau_Countdown.Interval)
    18. Bauname.Text = "Kündigungsfrist KL"
    19. lbl_Countdown_Label.Text = RestlicheZeit.ToString
    20. Pbar1.Value = CInt(100 - ((RestlicheZeit.TotalMilliseconds / FullTime.TotalMilliseconds) * 100))
    21. If RestlicheZeit <= New TimeSpan(0) Then
    22. Bau_Countdown.Stop()
    23. Pbar1.Value = 0
    24. End If
    25. End Sub


    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. ##

    Geile sache. Vielen dank es funktioniert !!!!

    Hab nur dein "Bau_Countdown.Interval = 100" auf 1000 gestlellt für Sek. ;)

    Wie wäre das einflegen wenn ich jetzt möchte das man auf dem Button klickt und dann aus dem nix, dass dann auftaucht (Kündigung KL + PBar + Countdown)? ?(

    Und kann man dies auch als Dim setzen, wenn ich z.b. jetzt ein anderen Button klicke wo statt 10 Sek. .... 20 Sek. zeit vergehen soll, und anderer Text kommt.... oder müsste ich pro Button einen Tick_Timer einbauen?
    ​Hallo

    Erstmal, das ist kein DIM sondern eine Variable. Dim gibt es nur unter VB trotzdem ist es unter C# auch eine Variable.
    Ob ich jetzt Dim a As y schreibe oder Private x As y oder Public x As y ist erstmal nebensächlich.
    Bei Private x As y ist die Variable eben nur innerhalb dieser Klasse verfürbar.
    Ich würde dir Empfehlen das du dir die Grundlagen aneignest! z.b. mit einem Buch.

    Wenn du mit einem anderen Button ein anderes Interval starten willst musst du ja nur die 'FullTime' ändern oder direkt einen neuen TimeSpan übergeben.
    Deshalb habe ich es ja als Variable gesetzt.

    z.b.

    VB.NET-Quellcode

    1. Private Sub AndererButton_Click(sender As Object, e As EventArgs) Handles AndererButton.Click
    2. Set_Countdown(New TimeSpan(0,0,10))
    3. Bau_Countdown.Start()
    4. End Sub

    oder

    VB.NET-Quellcode

    1. Private Sub AndererButton_Click(sender As Object, e As EventArgs) Handles AndererButton.Click
    2. FullTime = New TimeSpan(0,0,10)
    3. Set_Countdown(FullTime)
    4. Bau_Countdown.Start()
    5. End Sub



    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,

    Ja sorry ich bin leider noch kein Profi aber ich teste mich langsam ran ....
    Ich nenen es leider immer DIMs sorry statt variable .... finde es manchmal verständlicher aber versuche es ab sofort variable zu nenen :D

    Dein zweiter Code ist super und für meine bedürfnisse.... DANKE.... habs im load etwas geändernt und es läuft. :thumbup:

    Hast du noch ein tipp für meine hinzufügemethode?

    wenn ich z.b. jetzt ein anderen Button klicke wo statt 10 Sek. .... 20 Sek. zeit vergehen soll, und anderer Text kommt.... oder müsste ich pro Button einen Tick_Timer einbauen?

    also da soll darunter ein weitere Pbar entstehen mit allen drum und dran .... und das andere nach Zeit ablauf verschwinden und an oberster stelle rutschen.
    Hallo

    ​Wie ich dir bereits in Post #2 geschrieben habe ist es am einfachsten du erstellt eine neue Progressbar. Z.b. Pbar2.
    Die machst du Visible = False
    ​Wenn du diese dann einblenden willst mit Visible = True und dann einfach deine Timer Methode überarbeiten.

    ​PS: Es ist kein Problem das du kein Profi bist, bin ich auch nicht. Aber wenn du Programmieren willst solltest du die Basics verstehen.
    ​Es wird dir nichts bringen Code zu kopieren und dann wegen jeder Zeile die du änderst an der Wand zu stehen. Ich meine es nur gut.
    Genau deshalb Poste ich so ungern fertigen Code, du sollst selbst herausfinden wie es geht, ich gebe nur Tipps in die richtige Richtung.

    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. ##

    Okay.... war grad schon dabei es mit einer 2ten PBar zu versuchen komme nur mit die Timer methode nicht ganz klar habe quasi alles zwei mal im code.
    Starte ich Button1 geht PBar1 los .... Starte ich PBar2 geht beides los ? .... sehr komisch

    aber ist es machbar das ich nur ein Ticker verwende für sage ich mal 10 Counter?

    Dein PS Tipp ist sehr gut und respektiere ihn voll und ganz... Ich will ja auch lernen und nicht nur Kopieren, deshalb lese ich mir die Codes durch schreibe sie selber ohne zu Kopieren in meine Form und schaue wo welche veränderung für mein nächsten schritt passen könnte. ;)

    so mache mich erstmal weiter ran an die Visible methode und schau mal wie das aussieht :)
    Hallo Es kommt ganz darauf an was du anders machen willst mit click auf den zweiten, dritten, vierten Button.

    Du kannst es mit mehreren Timern machen, du kannst es z.b. auch mit einem Enumerator machen.
    Aber da fehlen dir vermutlich die Basics.

    VB.NET-Quellcode

    1. Public Enum enuTimerWork
    2. work1 = 0
    3. work2 = 1
    4. work3 = 2
    5. End Enum


    und dann kannst du im Timer natürlich abfragen welche Arbeit verrichtet werden soll.

    If CurrentWork = work2 then .....

    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. ##

    Ah sehr guter vorschlag....

    ein wenig kenn ich mich aus mit If, ich versuche es mal damit.

    Die Button frage:
    Klickt man auf Button1 läuft der Timer mit 3 Stunden Kündigungsfrist in der Pbar1 methode
    Klickt man auf Button2 läuft der Timer mit 1 Stunde Kündigungsfrist in der Pbar2 methode

    Bis hierhin mal wieder ein Vielen dank, hast mir geht geholfen und mein wissen erweitert (merke wie mein Kopf wächst) :thumbsup:
    Gerne.

    ​Schau dir die Enumerator an. Super zum Arbeiten.

    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 also das mit Enum ist echt schwehr zu verstehen. Ich hab mich ran getraut, aber denke nicht das mein Ansatz richtig ist.

    Im load:

    VB.NET-Quellcode

    1. t.Start()




    VB.NET-Quellcode

    1. Private WithEvents t As New Timer ' Timer erstellung
    2. Private Enum Testaction As Integer
    3. Kuendigung1 = 1
    4. Kuendigung2 = 2
    5. End Enum
    6. Private Currentwork As Testaction
    7. Sub Set_Countdown(ByVal Span As TimeSpan) 'Countdown zum Bau
    8. Bau_Countdown.Stop()
    9. RestlicheZeit = Span
    10. lbl_Countdown_Label.Text = RestlicheZeit.ToString()
    11. End Sub
    12. Private Sub Bau_Countdown_Tick(sender As Object, e As EventArgs) Handles Bau_Countdown.Tick 'Timer 1
    13. If Currentwork = Kuendigung1 Then
    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 = 100
    20. Produktionsname1.Visible = False
    21. Pbar1.Visible = False
    22. lbl_Countdown_Label.Visible = False
    23. End If
    24. End If
    25. End Sub


    Im Click dann der "Private WithEvents t As New Timer" als einbindung "t" = für neuen Timer

    Ist das alles halbwegs richtig?
    Hallo

    ​Soweit ganz OK.

    ​Ich sehe leider nicht was du beim Button klick machst. Aber da musst du natürlich den Aktuellen "Work" setzen. ​CurrentWork = Kuendigung1
    ​Im Timer gehst du jetzt aber nur auf "Kuendigung1" ein. Auf die anderen nicht!!

    Entweder:

    VB.NET-Quellcode

    1. Private Sub Bau_Countdown_Tick(sender As Object, e As EventArgs) Handles Bau_Countdown.Tick 'Timer 1
    2. If Currentwork = Kuendigung1 Then
    3. RestlicheZeit -= TimeSpan.FromMilliseconds(Bau_Countdown.Interval)
    4. lbl_Countdown_Label.Text = RestlicheZeit.ToString
    5. Pbar1.Value = CInt(100 - ((RestlicheZeit.TotalMilliseconds / FullTime.TotalMilliseconds) * 100))
    6. If RestlicheZeit <= New TimeSpan(0) Then
    7. Bau_Countdown.Stop()
    8. Pbar1.Value = 100
    9. Produktionsname1.Visible = False
    10. Pbar1.Visible = False
    11. lbl_Countdown_Label.Visible = False
    12. End If
    13. End If
    14. If Currentwork = Kuendigung2 Then
    15. ........
    16. End If
    17. End Sub


    ​Oder besser

    VB.NET-Quellcode

    1. Private Sub Bau_Countdown_Tick(sender As Object, e As EventArgs) Handles Bau_Countdown.Tick 'Timer 1
    2. Select Case Currentwork
    3. ​Case Kuendigung1
    4. RestlicheZeit -= TimeSpan.FromMilliseconds(Bau_Countdown.Interval)
    5. lbl_Countdown_Label.Text = RestlicheZeit.ToString
    6. Pbar1.Value = CInt(100 - ((RestlicheZeit.TotalMilliseconds / FullTime.TotalMilliseconds) * 100))
    7. If RestlicheZeit <= New TimeSpan(0) Then
    8. Bau_Countdown.Stop()
    9. Pbar1.Value = 100
    10. Produktionsname1.Visible = False
    11. Pbar1.Visible = False
    12. lbl_Countdown_Label.Visible = False
    13. End If
    14. Case Kuendigung2
    15. ........
    16. End Select
    17. End Sub


    ​Ist jetzt nur aus dem Gedanken geschrieben, kann sein das Syntaxfehler drinnen sind.

    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. ##