"Ungültige Konvertierung von der Zeichenfolge in Typ Integer."

  • VB.NET

Es gibt 28 Antworten in diesem Thema. Der letzte Beitrag () ist von Cytexor.

    "Ungültige Konvertierung von der Zeichenfolge in Typ Integer."

    Guten Abend.

    Zunächst möchte ich betonen, dass ich noch Anfänger im Programmieren mit VB bin.
    Ich habe eben ein kleines Spaßprogramm geschrieben, in welchem man einen Button drückt, durch diesen Klick einem Label eine zufällige Zahl >=1 und <=3000 zugeordnet wird und bei jedem Klick ein weiteres Label die Variable x zugeordnet wird, welche nach jedem Klick +1 (also x = x + 1) gerechnet wird. Das x wird hierbei stets gespeichert und beim erneuten Aufrufs des Programms auch sofort wieder geladen. Sobald x = 100 erreicht ist, wird Button.enabled = false gesetzt und man kann das Programm nicht mehr Nutzen, insofern man nicht das Passwort für den "Reset-Button" besitzt, welches in eine Textbox einzugeben ist.

    Ich hoffe mein Programm ist so erstmal veranschaulicht für euch - kommen wir somit nun zu meinem Problem. Das Programm läuft in VB ohne Probleme , kann jedoch die .exe nicht starten , da ich dann jedes Mal die Fehlermeldung bekomme "Ungültige Konvertierung von der Zeichenfolge in Typ Integer.". Da ich , wie bereits erwähnt , Anfänger bin, weiß ich leider auch nicht was das ganze überhaupt zu Bedeuten hat und habe überhaupt keine Ahnung wie ich das Programm umschreiben kann um die .exe nutzbar zu machen.

    Hier der Code :

    siehe unten

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

    Ist ganz einfach: :)

    VB.NET-Quellcode

    1. L1337.Text = rnd.Next(1, 3000).ToString


    Bei dir handelt es sich um einen Integer, also um eine ganze Zahl, du brauchst Jedoch einen String, also einen Text.
    .Text weist immer darauf hin das du einen String benötigst.

    Schalte mal in deinen Optionen "Option Strict" auf "On" :)
    Wenn du nicht weißt wie das geht guck schnell auf Youtube nach :)
    scheinbar soll es Zeile 39 "x = My.Settings.Save1" sein.

    Edit: Habe jetzt Option Strict ON , jedoch wird mein Problem dadurch gerade nur ausgereifter... Kann die .exe immer noch nicht öffnen , nur dass ich jetzt immer die Meldung bekomme "Glücksspiel hat ein Problem festgestellt und musste beendet werden."

    2. Edit: Jetzt läuft irgendetwas völlig drunter und drüber.. jedes mal wenn ich das Programm debuggen möchte kommt jetzt in VB die Meldung "Win32Exception wurde nicht behandelt. Ungültiger Fensterklassenname." Brauche dringend Hilfe!

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

    SpaceyX schrieb:

    OPTION STRICT ON!

    Habe es jetzt eingeschaltet - dadurch entsteht jetzt bei mir das Problem dass ich diese Meldungen bekomme:
    " 'Option Strict On' lässt keine impliziten Konvertierungen von Integer in String zu" (Zeile 9)
    " 'Option Strict On' lässt keine impliziten Konvertierungen von Integer in String zu" (Zeile 41)

    Wie kann ich das Ganze denn dann jetzt umschreiben damit es wieder funktioniert?


    alca schrieb:


    Ist My.Settings.Save1 ein Integer? Verzichte allgemein auf My.Settings.

    Ja My.Settings.Save1 ist jetzt ein Integer. Wie meinst du das ? Wenn ich nur Save1 schreibe ohne My.Settings. , dann kommt eine Fehlermeldung dass Save1 nicht deklariert sei.


    Hier nochmal das jetzt leicht abgeänderte Programm:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim x As Integer
    3. Dim y As Integer
    4. Dim rnd As New Random
    5. Private Sub B1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B1.Click
    6. x = My.Settings.Save1
    7. LZähler.Text = x
    8. If x < 100 Then
    9. L1337.Text = rnd.Next(1, 3000).ToString
    10. If L1337.Text = "1337" Then
    11. Label1.Text = ""
    12. LGlückwunsch.Text = "GLÜCKWUNSCH !"
    13. B2.Visible = True
    14. B1.Enabled = False
    15. Else
    16. Label1.Text = "Schade! Versuch es weiter!"
    17. x = x + 1
    18. End If
    19. Else
    20. B1.Enabled = False
    21. Label1.Text = ""
    22. LGlückwunsch.Text = "Verloren!"
    23. End If
    24. My.Settings.Save1 = x
    25. My.Settings.Save()
    26. End Sub
    27. Private Sub B2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B2.Click
    28. Process.Start("http://lolskinviewer.com/#Alistar")
    29. End Sub
    30. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    31. x = My.Settings.Save1
    32. LZähler.Text = x
    33. Label4.Text = 1 / 3000 & "%"
    34. End Sub
    35. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    36. If TBReset.Text = "resetdat" Then
    37. Dim y As Integer
    38. B1.Enabled = True
    39. y = 0
    40. My.Settings.Save1 = y
    41. LGlückwunsch.Text = ""
    42. Else
    43. MsgBox("U won't get dat PW hehe")
    44. End If
    45. End Sub
    46. End Class
    OT: Deine Formatierung ist schrecklich, lass das mal bitte mit den ganzen leerzeilen, da kriegt man ja Augenkrebs. O.o
    Es reicht wenn du Leerzeilen zwischen den Einzelnen Subs lässt.

    So:

    VB.NET-Quellcode

    1. Public Class Form1 Dim x As Integer
    2. Dim y As Integer
    3. Dim rnd As New Random
    4. Private Sub B1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B1.Click
    5. x = My.Settings.Save1
    6. LZähler.Text = x
    7. If x < 100 Then
    8. L1337.Text = rnd.Next(1, 3000).ToString
    9. If L1337.Text = "1337" Then
    10. Label1.Text = ""
    11. LGlückwunsch.Text = "GLÜCKWUNSCH !"
    12. B2.Visible = True
    13. B1.Enabled = False
    14. Else
    15. Label1.Text = "Schade! Versuch es weiter!"
    16. x = x + 1
    17. End If
    18. Else
    19. B1.Enabled = False
    20. Label1.Text = ""
    21. LGlückwunsch.Text = "Verloren!"
    22. End If
    23. My.Settings.Save1 = x
    24. My.Settings.Save()
    25. End Sub Private Sub B2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B2.Click
    26. Process.Start("http://lolskinviewer.com/#Alistar")
    27. End Sub
    28. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    29. x = My.Settings.Save1
    30. LZähler.Text = x
    31. Label4.Text = 1 / 3000 & "%"
    32. End Sub
    33. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    34. If TBReset.Text = "resetdat" Then
    35. Dim y As Integer
    36. B1.Enabled = True
    37. y = 0
    38. My.Settings.Save1 = y
    39. LGlückwunsch.Text = ""
    40. Else
    41. MsgBox("U won't get dat PW hehe")
    42. End If
    43. End Sub
    44. End Class


    EDIT: Ich hasse diese scheiß Tag, das ist bei mir nur am rum spinnen, malt nimmt es garkeine Leerzeilen mal eine nicht, egal von wo ich das kopiere.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „m3xx“ ()

    Ich meinte du solltest auf My.Settings - Namespace verzichten und die Dinge irgendwo selber speichern. Aber das ist eine andere Sache.

    Schau Mal nach, ob du "Save1" als Integer deklariert hast, denn so wie es aussieht, ist es ein String.

    /Edit: @m3xx

    VB.NET-Quellcode

    1. Public Class Form1 Dim x As String
    2. Dim y As Integer
    3. Dim rnd As New Random
    4. Private Sub B1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B1.Click
    5. x = My.Settings.Save1
    6. LZähler.Text = x
    7. If x < 100 Then

    Wie soll das denn funktionieren? (Zeile 1)
    Deine Variable x deklarierst Du am besten als Integer. Ausserdem solltest Du Deine Daten von der GUI trennen. Wenn Du einen Wert aus einer TextBox brauchst, dann weise den Wert zuerst einer Variablen zu. Mit dieser Variablen arbeitest Du dann weiter. Wenn Du nur Zahlen in Deinen TextBoxen hast, dann empfiehlt es sich, diese gegen NumericUpdDowns zu ersetzten, dann kannst Du Dir z. B. Abfragen, ob es sich wirklich um Zahlen handelt, was da drin steht, sparen.

    My.Settings kannst Du ruhig verwenden, lass Dir da nichts einreden. Auch, wenn vieles aus dem My-Namespace Müll ist, My-Settings ist immer noch besser, als das, was sich manche da selber zusammenschustern. Das Binding, was Dir My-Settings ermöglicht, ist wirklich ein nettes Feature.

    Dann soll @alca mal erklären, warum er sowas von sich gibt.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    @alca: Eiglich sind My.Settings eine ganz fabelhafte erfindung, nur das My.Settings.Save hätte er sich sparen können.

    @TE: etwas bist du ja vorangekommen mit Bitte VB-Tag benutzen - aber richtig, jetzt nur noch die Einrückungen wieder herstellen, dann kann mans auch lesen.

    welches ist die Fehlerzeile?

    alca schrieb:

    Ja stimmt schon, aber es gibt elegantere Lösungen


    Dann lass mal hören und erklär vor Allem, warum My-Settings nicht verwendet werden sollte. Da bin ich ja mal gespannt.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    @SpaceyX
    Nun My-Settings an sich ist ja keine schlechte Funktion, aber ich hab solches Zeug lieber gleich beim Programm in einer XML Datei. Ausserdem hat man so mehr freiraum etc. Aber ich sehs schon, das sollte jedem selber überlassen sein ;)

    OT:
    Save1 stellst Du am Besten im Settings-Designer auf Integer...!
    Versuch das doch Mal jetzt.

    Rinecamo schrieb:

    VB.NET-Quellcode

    1. LZähler.Text = CStr(x) 'Oder x.ToString()


    Vielen Dank! Jetzt ist der Code immerhin schonmal wieder korrekt!
    Das einzige und vermutlich letzte Problem ist , dass ich jetzt wieder beim Debuggen die Nachricht "Win32Exception wurde nicht behandelt. Ungültiger Fensterklassenname." bekomme... Was ist zu tun? :(