Konvertierungsprobleme eines Anfängers

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von fichz.

    Konvertierungsprobleme eines Anfängers

    Hallo zusammen.Ich noch ziemlich neu in VB.NET. Habt daher bitte Nachsicht wenn mein Problem ein Anfängerfehler ist.

    Ich habe in einem StatusStrip ein Label und eine Progressbar. Das Label soll das aktuelle Datum anzeigen und in der Progressbar soll der Fortschritt beim schließen des Programms angezeigt werden. Dabei läuft ein Timer von 5 Sekunden ab.

    Folgenden Code nutze ich.

    VB.NET-Quellcode

    1. Dim endezeit As Single
    2. Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    3. staLblZeit.Text = CStr(DateTime.Today)
    4. End Sub
    5. Private Sub mnuEnde_Click(sender As Object, e As System.EventArgs) Handles mnuEnde.Click
    6. endezeit = 0
    7. Timer1.Enabled = True
    8. End Sub
    9. Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
    10. endezeit += 0.1
    11. If endezeit >= 5 Then
    12. Me.Close()
    13. Else
    14. staProgressEnde.Value = endezeit
    15. End If
    16. End Sub


    Bei Zeile 13 und 17 wird mir jeweils ein anderer Konvertierungsfehler ausgegeben, und ich weiss nicht warum.

    Zeile 13: Fehler 1 "Option Strict On" lässt keine impliziten Konvertierungen von Double in Single zu.
    Zeile 17: Fehler 2 "Option Strict On" lässt keine impliziten Konvertierungen von Single in Integer zu.

    Wenn ich in Zeile 17 CInt(endezeit) versuche, läuft der Fortschrittsbalken nicht ab.
    Könnt ihr mir auf die Sprünge helfen, wo der Fehler ist, und evtl erklären? Wie gesagt, ich bin noch Anfänger.

    Vielen Dank vorab.
    Rechtschreibfehler betonen den künstlerischen Charakter des Autors.
    Hi,

    Fehler 1 passiert deswegen, weil der Wert 0.1 als Double interpretiert wird. Willst du du einen Single addieren kannst du es entweder in einen Single konvertieren ​Csng(endezeit + 0.1) oder, wesentlich eleganter einfach ein F hintendran hängen. Somit weiß der Kompiler, dass du einen Single hinzuaddieren willst ​endezeit += 0.1F.
    Fehler 2 kommt daher, dass Value der Progressbar vom Typ Integer (Ganzzahl -> ohne Komma) und Single aber eine Fließkommazahl ist. Hier wäre als Lösung am Einfachsten, wenn du der Progressbar einen Maxwert von 5 gibst und endezeit in ebenfalls in einen Integer abänderst. Addieren würdest du dann nicht mehr 0.1 sondern einfach 1.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Mach aus endezeit einfach ein Double, macht jz keinen großen Unterschied.
    Zeile 17 ist schon kritischer, eine ProgressBar kann nix mit Fließkommazahlen anfangen. Daher etwas Mathematik, lass die ProgressBar nicht von 0 bis 5 in 0.1er Schritten laufen, sondern von 0 bis 50 in 1er Schritten. Sprich PB.Maximum = 50 und dann in Zeile 17 einfach PB.Increment(1) oder PB.Value = CInt(endezeit)
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    Hey,

    vielen Dank für die schnellen Antworten.
    Habe beide vorschläge ausprobiert, und funktioniert.
    Und ganz nebenbei, was das wichtigste ist, habe ich wieder was gelernt.

    Hier der Code für andere Nutzer die ähnliche Probleme haben.

    VB.NET-Quellcode

    1. Dim endezeit As Integer
    2. Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    3. staLblZeit.Text = CStr(DateTime.Today)
    4. End Sub
    5. Private Sub mnuEnde_Click(sender As Object, e As System.EventArgs) Handles mnuEnde.Click
    6. endezeit = 0
    7. Timer1.Enabled = True
    8. End Sub
    9. Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
    10. endezeit += 1
    11. If endezeit >= 20 Then
    12. Me.Close()
    13. Else
    14. staProgressEnde.Value = CInt(endezeit)
    15. End If
    16. End Sub


    Das Maximum der Progressbar wurde in den Eigenschaften auf 20 festgelegt.
    Rechtschreibfehler betonen den künstlerischen Charakter des Autors.