Timer + 1 = 11, 111, usw

  • VB.NET

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von TobiK.

    Timer + 1 = 11, 111, usw

    Hallo,

    ich hab ein Timer problem: Ich will im Timer einfach +1 hochzählen (gestartet wird per button, der timer.enable = true setzt)

    VB.NET-Quellcode

    1. Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
    2. Dim count As Integer = 0
    3. count = +1
    4. Label5.Text = Label1.Text
    5. Label1.Text = CInt(Label5.Text + count)
    6. If TextBox3.Text = Nothing Then TextBox3.Text = 500
    7. Timer2.Interval = TextBox3.Text


    hier erscheint das Problem : Beim Umwandeln einer Zahl muß der Wert einer Zahl sein, die kleiner als unendlich ist. (bezogen auf "count")
    Ok, dachte ich mir..stellen wir es etwas um

    VB.NET-Quellcode

    1. Dim count As String = 0
    2. count = +1
    3. Label5.Text = Label6.Text
    4. Label6.Text = CInt(Label5.Text + count)
    5. If TextBox3.Text = Nothing Then TextBox3.Text = 500
    6. Timer2.Interval = TextBox3.Text


    Jetzt zeigt er im Label5 folgendes an: zuerst1..dann 11..danach 111..anschließend 1111 usw. :huh: 8| wo ist der denkfehler?

    ich hoffe ich werde jetzt nicht ausgelacht :rolleyes: :D

    Vielen Dank im voraus

    Tobi
    1. Option Strict ON
    2. Du setzt Cint() falsch ein. (Ausserdem wäre hier Integer.Parse angebrachter)

    Label5.Text + Count ist Label5.Text & Count <- wird implizit umgewandelt von integer zu String weil option strict off.
    Richtig wäre es so (weiß jetzt nicht was du vorhast, deswegen behalt ich die Umsetzung von dir und verbessere nur die Fehler):

    VB.NET-Quellcode

    1. Static count As Integer = 0
    2. count += 1
    3. Label5.Text = Label6.Text
    4. Label6.Text = (Integer.Parse(Label5.Text) + count).ToString()
    5. If String.IsNullOrEmpty(TextBox3.Text) Then TextBox3.Text = "500"
    6. Timer2.Interval = Integer.Parse(TextBox3.Text)
    Du musst Count als Globale Variabele machen, also nicht in ein Sub sondern

    VB.NET-Quellcode

    1. Private count as Integer


    dann im load event

    VB.NET-Quellcode

    1. count = 0


    dann im Timer Tick Event

    VB.NET-Quellcode

    1. count = +1
    2. Label5.Text = Label6.Text
    3. Label6.Text = CInt(Label5.Text + count)
    4. If TextBox3.Text = Nothing Then TextBox3.Text = 500
    5. Timer2.Interval = TextBox3.Text
    Warum nicht

    VB.NET-Quellcode

    1. Dim countValue as Long = count
    2. Dim refValue as Long = Label6.Text
    3. Dim newValue as Long = countValue + refValue
    4. Me.Label6.Text = newValue
    5. Timer2.Interval = TextBox3.Text
    6. TextBox3.Text = 500
    das geht doch mit Option Strict On

    VB.NET-Quellcode

    1. Dim count As Integer = 0
    2. Dim cValue As Long = count
    3. Dim refValue As Integer = 5
    4. Dim rValue As Long = refValue
    5. Dim ausgabeValue As Long = cValue + refValue
    6. MessageBox.Show(ausgabeValue.ToString)


    Bzw mit String Werten

    VB.NET-Quellcode

    1. Dim count As String = "0"
    2. Dim cValue As Long = Long.Parse(count)
    3. Dim refValue As String = "5"
    4. Dim rValue As Long = Long.Parse(refValue)
    5. Dim ausgabeValue As Long = cValue + rValue
    6. MessageBox.Show(ausgabeValue.ToString)


    Ausgabe = 5
    mit Strings

    VB.NET-Quellcode

    1. Dim count As String = "0"
    2. Dim cValue As Long = Long.Parse(count)
    3. Dim refValue As String = "5"
    4. Dim rValue As Long = Long.Parse(refValue)
    5. Dim ausgabeValue As Long = cValue + rValue
    6. MessageBox.Show(ausgabeValue.ToString)
    Ich dachte das bezog sich auf mich, die Codes Sollten nur als Beispiel dienen, wie man einen String zu Long Konvertiert.

    ThuCommix schrieb:

    Was soll das darstellen? Mach mal Option Strict On und versuch diesen Mist zu kompilieren!
    Hallo TobiK,

    Was ist der Zweck deines... Konstruktes? :wacko:
    Wir haben zwar keine Ahnung, was du machen willst, aber eines können wir dir sagen: Das geht besser! Dein Code ist so schlimm mit Fehlern verseucht, dass du am Besten alles löschst und neu schreibst. D.h. Option Strict On, sinnvolle Controlbenennung etc.
    Ich würde zwar gerne darauf verzichten, aber ich muss dich trotzdem auf Lehrmaterial(z.B. das MS-2010er Entwicklungsbuch) hinweisen, das du unbedingt durchzulesen hast, bevor du weitermachst.

    Grüsse

    Higlav

    PS: Noch was: Du hast kein "Timer-Problem". Dein Problem ist ein klein wenig grösser. ;)

    TobiK schrieb:

    wo ist der denkfehler?
    Du "Addierst" Strings, keine Zahlen.
    Probiere dieses Beispiel aus:

    VB.NET-Quellcode

    1. Private txt As String = ""
    2. Private value As Integer = 0
    3. Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
    4. txt += "1"
    5. value += 1
    6. Label1.Text = txt
    7. Label2.Text = value.ToString
    8. End Sub
    Damit Dir solch Fehler nicht jedesmal passiert, gibt es 1. Option Strict On
    und zweitens werden Strings in VB.NET mit einem & verknüpft. ==>

    VB.NET-Quellcode

    1. txt &= "1"
    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!
    Hallo,
    ..Wieder einmal möchte ich meinen Dank für die rege Beteiligung und Hilfestellung der Community ausdrücken. Das ist Klasse!!!

    Das zwischendurch negative Diskussionen geführt wurden, tut mir leid (konnte das auf Arbeit kurz einsehen (zwischen ThuCommix und Andy) aber leider nicht antworten).
    Ich bin froh als "new" Newbie immer wieder fragen äußern zu können ohne das man gleich Angst haben muß, nieder gemacht zu werden *Danke an dieser Stelle auch den Admin(s)!!*
    Ich finde es toll das so viele Helfen wollen und das auch tun, und sich nebenbei gegenseitig Beraten und austauschen.

    Natürlich ist mir bewußt, das ich VIELES nach zu holen hab und mir dementsprechend viel durch zu lesen habe -also deine Leseempfehlung werde ich befolgen (higlav) und hab es auch nicht falsch verstanden oder negativ empfunden. Jedoch ist manchmal zu viel Stoff für mich auch sehr schwer zu verstehen..jedenfalls auf einen Ruck.

    Toll find ich eure gezeigten snippets->so konnte ich rum probieren und darüber nachdenken warum, was und wieso das funktioniert..

    Ps: "Strict on" kann ich im moment noch nicht durchführen, dann werden zu viele Fehler angezeigt, die ich erst im nachhinein ausmerzen will (nach dem Motto-es funktioniert, jetzt wird optimiert) ..soll nicht bedeuten das alles falsch ist, aber ich lerne hier jeden Tag neues und baue es dann natürlich auch ein, alles vorhergehende bleibt vorerst.

    Zur Funktion: Das wird ein Programm zum Schattenboxen, welches mir Kombinationen zu ruft (random oder Technikbezogen). Der Timer soll mir ermöglichen bestimmte zusätzliche Funktionen zu implementieren (if count = x then y else ...etc)

    Nochmals ein fettes Danke an die Community und die Admins!

    'Achso, es funktioniert auch endlich, muß ich noch los werden' ^^