Variable und Labels Countdown nicht gleich!

  • VB.NET
  • .NET 4.0

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

    Variable und Labels Countdown nicht gleich!

    Moin! :)
    Ich habe ein seltsames Problem.
    In meiner Anwendung befinden sich drei Labels, und jede Sekunde wird eine int-Variable runter gezählt.
    Das Letze Label, „Zwischenablage leeren“, ist langsamer als die anderen.
    Sobald alle anderen Labels 0 Sekunden anzeigen, ist dieses Letze Label
    Immer noch bei 1 Sekunde.
    (Siehe Bild)
    Ich habe mal das Projekt hochgeladen, freue mich auf eine Antwort.
    Da ich, den Grund nicht verstehe.
    BIG THX


    WindowsApp5.zip
    Visual Basic.NET 8o
    MS-SQL
    8o

    Neu

    Hey,
    nachdem ich den Intervall des Timers auf 1000 gesetzt habe, und die Double Variablen zu Integers ersetzt habe, hatte ich kein Problem mehr. Vorher schon.
    Darf ich fragen warum du den Intervall des Timers auf eine 500 gesetzt hast und Double verwendest?

    Überarbeiteter Code:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Form1
    3. Dim intZeitProzesse As Integer = 60
    4. Dim intZeitClipboard As Integer = 60
    5. Dim intZeitRam As Integer = 60
    6. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    7. ' Anzeige...
    8. Me.lblProzesseInfofeld.Text = String.Format("Prüfe Prozesse in {0} Sekunde(n)", intZeitProzesse.ToString())
    9. Me.lblZwischenablageInfofeld.Text = String.Format("Zwischenablage leeren in {0} Sekunde(n)", intZeitClipboard.ToString())
    10. Me.lblRAMInfofeld.Text = String.Format("Prüfe Arbeitspeicher in {0} Sekunde(n)", intZeitRam.ToString())
    11. ' Steuerung...
    12. If intZeitProzesse = 0 Then intZeitProzesse = 60
    13. If intZeitClipboard = 0 Then intZeitClipboard = 60
    14. If intZeitRam = 0 Then intZeitRam = 60
    15. ' Abziehen...
    16. If intZeitProzesse <> 0 Then intZeitProzesse -= 1
    17. If intZeitRam <> 0 Then intZeitRam -= 1
    18. If intZeitClipboard <> 0 Then intZeitClipboard -= 1
    19. End Sub
    20. Private Sub btnProzesseErinnerungBeenden_Click(sender As Object, e As EventArgs) Handles btnProzesseErinnerungBeenden.Click
    21. ' Zeit kürzen...
    22. intZeitRam = 2
    23. intZeitProzesse = 2
    24. intZeitClipboard = 2
    25. End Sub
    26. End Class

    Wenn ich dir auf irgendeiner Art und Weise helfen konnte, drück doch bitte den "Hilfreich" Button :thumbup:

    Webseite geupdatet schaut nun vorbei ;)
    Option Strict On nicht vergessen!

    Neu

    Math.Round(58.5).ToString ergibt "58"
    (58.5).ToString("0") ergibt "59"
    Noch Fragen?
    Daher immer gleiche Zahlen-Darstellungen verwenden und prüfen, was dabei rauskommt.
    Warum heißen die Variablen z.B. intZeitProzesse, wenn sie vom Typ Double sind. Mit der Benennung schießt Du Dir selber ins Knie.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.

    Neu

    @ClonkAndre
    Danke, für deine Hilfe. :)
    Ursprünglich war die Variable eine Integer.
    Ich habe um zu testen, andere Datentypen wie Decimal/Double ausprobiert!
    In meinen Timer ist Code drin, diese alle 500ms ausgeführt werden soll.
    Deshalb ziehe ich von der Zeit-Variable immer 0.5 ab.

    @VaporiZed
    Danke, für deine Hilfe. :)
    Wie oben bereits erwähnt, habe ich ursprünglich mit einer Integer Variablen gearbeitet.
    Habe einfach, beim hochladen des Projektes den Namen noch nicht geändert!
    Du hast die Lösung gefunden.
    Super!
    In Zukunft werde ich deinen hilfreichen Rat befolgen.
    Mit der gleichen Zahlen-Darstellungen!

    Die Lösung: :thumbup:

    VB.NET-Quellcode

    1. Math.Round(intZeitClipboard))

    Visual Basic.NET 8o
    MS-SQL
    8o

    Neu

    Cheffboss schrieb:

    Die Lösung
    ist das noch nicht, denn bei dieser Bezeichnung muss ich mich fragen, warum eine Integer-Variable namens intZeitClipboard gerundet werden muss. Auch wenn das int "International", nicht aber "Integer" heißen soll, ist das irreführend.
    Gib der Variable vielleicht einen besseren Namen. ;)
    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!

    Neu

    Warum denn nun Decimal? Es geht doch um eine Zeit in ganzen Sekunden. Das Prinzip mit den halben Sekunden versteh ich hier eh nicht. Warum überhaupt einen Datentyp mit Nachkommastelle verwenden? Warum ist der verwendete Datentyp überhaupt im Variablennamen ablesbar bzw. dessen Bestandteil? Du solltest Dir mehr um das Thema Benennung Gedanken machen. Aufgrund Deines Codes wäre das hier z.B. m.E. ein besserer Name: ZeitInSekundenBisZurNächstenÜberprüfungDerLaufendenProzesse. Hat zwar 3 Nachteile (deutsch, Umlaute, Länge). Besser wäre daher ggf. TimeInSecondsUntilNextCheckOfRunningApps Aber immerhin: Du weißt sofort, worum es geht. Auch in 3 Monaten noch.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.

    Neu

    @VaporiZed
    Ich habe den Datentyp wieder in ein Integer geändert.
    Ich habe das mit dem Decimal nur ausprobiert, weil die Anzeige, im Timer ungenau war.
    Aber jetzt habe ich den Code verbessert, und die Anzeige der Labels ist wieder normal.

    Das wegen der Benennung von den Variablen.
    Das Beispiel von dir „ZeitInSekundenBisZurNächstenÜberprüfungDerLaufendenProzesse“.
    Ist es sinnvoll und machen das viele Programmierer, so ein länger Text, als Variabelnamen?
    Da ich immer gehört habe, der Name soll kurz und bündig sein.
    Oder ist das egal? :?:
    Visual Basic.NET 8o
    MS-SQL
    8o

    Neu

    Heutzutage spielt für den Compiler die Länge fast keine Rolle mehr. Daher kann man sich darauf konzentrieren, die Namen so zu vergeben, dass sie deren Zweck klar beschreiben. Was hast Du von einer Variable namens a oder ZiSbznÜdlP (Anfangsbuchstaben meines Vorschlags) oder eben IntZeitProzesse, wenn Du nächste Woche erstmal recherchieren musst, wozu diese Variable eigentlich gedacht ist? Wie andere Programmierer das mit der Benennung handhaben, weiß ich nicht (ist mir auch egal, solange das nicht zu meinem Problem wird), aber ich handhabe das so, dass die Variable den Namen bekommt, der zum Zweck passt. Und wenn ich im Laufe der Zeit merke, dass er unpassend ist oder es gar einen treffenderen Namen gibt oder einen kürzeren, der genauso viel aussagt, dann zögere ich nicht und benenne die Variable über Strg+r, Strg+r über die IDE um. Das gilt auch für Klassen und Prozeduren!

    ##########

    Es gibt wohl den Ratschlag: Je genereller etwas ist, desto kürzer der Name und entsprechend: je spezifischer etwas ist, desto länger. Will heißen: Wenn es um eine sehr weitreichende Klasse geht, sollte sie wohl einen kurzen Namen haben, wenn es um eine Variable mit kurzer Lebensdauer in einer eher tief versteckten Funktion geht, vergibt man einen langen Namen. Das beruht darauf, dass man sich dann in funktionalen Fitzeldetails befindet, die eben ein Detail verändert. Und dieses Detail benötigt manchmal eine ausschweifende Bezeichnung. Aber lass Dich von dieser Theorie nicht groß beeinflussen. Sowas kommt bei guter Code-Strukturierung von alleine. Versuch einfach Namen zu vergeben, die den Zweck genau beschreiben. Ohne dass Du irgendwo noch nach weiteren Details schauen musst.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.

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

    Neu

    Ich bin immer sehr für kurze Namen.
    Sowas: "ZeitInSekundenBisZurNächstenÜberprüfungDerLaufendenProzesse" ist fehleranfällig, weil mehrere so gebastelte CodeNamen kann man kaum noch unterscheiden. Angenommen eine zweite Variable:
    "ZeitInSekundenBisZurNächtlichenÜberprüfungDerLaufendenProzesse"
    Höchst riskant, dass ein Programmierer da Verwechslungen verzapft.