Interval nicht in Ms sondern Sek

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von Lukas.

    Interval nicht in Ms sondern Sek

    Hey,
    ich habe eine TextBox1 in dieser soll der Interval von dem Timer1 festgelgt werden.
    Ich glaube bis hierhin ist alles verständlich. Nun möchte ich aber den Intervall nicht in Millisekunden angeben, sondern
    in Sekunden. Gibt es da eine Möglichkeit ?

    Also z.B. wenn man einen Intervall von 6000 ms haben will (6sek) das ich dann in die Textbox1 "6" eingeben kann und nicht 6000.

    Danke
    Ja musste halt mit 1000 multiplizieren und dann als Intervall setzen. Problem?
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    Interval ist eine Eigenschaft (Property) des Timers. Weisst du, wie man diese zuweist? Achtung: Es gilt auch vom Datentyp String (TextBox.Text) in Integer (Timer.Interval) zu konvertieren.
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    Hier mal ein Lösungsansatz, für alle, die das hier per Google finden: (und auch für den TE, falls er es noch nicht geschafft hat)

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim tbwert As Double
    3. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    4. Double.TryParse(TextBox1.Text, tbwert)
    5. Dim interval As Integer = Convert.ToInt32(tbwert * 1000)
    6. End Sub
    7. End Class


    Der Code unterstützt auch Nachkommaangaben, also z.B. 2,5 Sekunden. Daher wird der ganze Kram erst zu Double geparst.
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.

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

    bei mir konnte man keine kommazahlen eingeben *-*

    Sollte aber Funktionieren: "0,01" wird z.B. zu "10". Wichtig ist, dass du "," zum trennen verwendest und nicht "."

    Außerdem wäre es sinnvoll zuerst zu prüfen ob sich in der textbox ein zahlenwert befindet - und nicht sowas wie "einszweidrei!!1elf" und das ergebnis ist später 0 ohne das der User davon etwas merkt. Stichwort: If IsNumeric("string321") Then ...

    Dennoch solltest du überdenken ob eine Textbox das für diesen Zweck sinnvollste Control ist: NummericUpDown lässt nur Zahlenwerte zu, du kannst die Anzahl der Kommastellen angeben sowie den Gültigen Zahlenbereich (wichtig, da der Timer bei eingaben wie "-123" abschmieren sollte, also nur werte von 0s - XXs funktionieren).

    lg
    Du kannst bei .Parse noch nen Parameter angeben, mit dem du das Float-Verhalten einstellen kannst.
    Dann funktionieren sowohl Kommas als auch Punkte in Kommazahlen. ;)
    Und .TryParse parst den Double nur, wenn er wirklich ein Double ist. IsNumeric ist hier unnötig.
    @ Samus Aran

    Wenn der User aber ein Interval von 5 Sekunden will - er schreibt "5#" und bestätigt (passiert ja mal wenn man die enter-taste knapp verfehlt xD). Das Interval wäre jetzt bei 0 und zwar ohne wissen des nutzers. Hätte man vorher geprüft ob es sich um eine gültige Zahlenangabe handelt hätte man dem Nutzer sagen können, dass er murks in die Textbox eingegeben hat^^ Funktionieren tut natürlich beides - bei tryparse und falscheingabe wird die double-variable auf 0 gesetzt

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim tbwert As Double
    3. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    4. If Double.TryParse(TextBox1.Text, tbwert) Then
    5. Dim interval As Integer = Convert.ToInt32(tbwert * 1000)
    6. else
    7. 'Ausgabe: Keine gültige Angabe
    8. End if
    9. End Sub
    10. End Class


    Wo ist das Problem ??
    Das ist meine Signatur und sie wird wunderbar sein!
    @ mono
    so ist es natürlich optimal!

    @ Samus Aran
    wir sind ja (fast) immer unterschiedlicher Meinung (wie bei dem bitmap.fromstream Thema) xD Will mich mit dir nicht streiten weil dein Lösungsweg natürlich auch Funktioniert. Mir persönlich würde es nur auf die Nerven gehen wenn bei jeder Veränderung eine MSG-Box aufploppt - von der ich nach dem ändern von 2 werten sowieso nur noch den JA!!-Button wahrnehme... ich fände es ausreichend wenn bei falscheingabe eine MSGbox angezeigt wird..
    Aber wie gesagt, dein Weg funktioniert genauso wie meiner und welcher eingeschlagen wird liegt im ermessen des Programmierers^^
    guggedmol, wassichmittm NumericUpdown angestellt hab:

    VB.NET-Quellcode

    1. Private Sub NumericUpDown1_Enter(ByVal sender As System.Object, ByVal e As EventArgs) _
    2. Handles NumericUpDown1.Enter, NumericUpDown1.MouseUp
    3. NumericUpDown1.Select(0, NumericUpDown1.Text.Length)
    4. End Sub
    Das selectiert jetzt immer den gesamten Text, wenn mans betritt.

    Weiters habich DecimalPlaces=3 eingestellt, und Increment=0,001.

    So, nun kann niemand mehr dort was eingeben, was nicht ein Decimal ist.

    Sinnvoller wäre übrigens ein Increment von 0,5 oder sowas, dann kann man die Zeit entweder direkt eintippen, oder halbsekundenweise verstellen.
    Mit einer If-Abfrage ist mein Code natürlich perfektioniert, so ist auch eine anständige Rückmeldung möglich, ohne noch Prüfungen á la Isnumeric oder ähnliches im Nachhinein reinfriemeln zu müssen ;)
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.