if-else (>) funzt nicht

  • C#

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

    if-else (>) funzt nicht

    Erstmal tuts mir leid falls ich hier falsch bin oder ich was falsch oder zu wenig poste oder sowas, bin das erste mal hier und jetzt zu meinem Problem:

    Ich programmiere grad einen Einarmigen Bandit und der Gesamteinsatz soll nicht über 100€ sein
    das mit der zufallszahl klappt schonmal problemlos, nur der Gesamteinsatz bereitet mir Kopfschmerzen. Ich möchte hier eine Variable "Zahl" für den eingegebenen wert des Einsatzes in die Textbox verwenden, jedoch muss ich meines Wissens der Textbox erst die Variable zuweisen. Gesagt, Versucht, jedoch ohne Erfolg. "Der Typ "double" kann nicht implizit in "string" konvertiert werden."
    zahl ist als double variable deklariert, habs aber auch schon mit int probiert also muss das Problem ja wohl woanders sein, deswegen möchte das "if" auch nicht mitspielen.

    Über simple antworten würd ich mich freuen, bin noch nicht lang dabei :)


    Mein Quellcode:

    C#-Quellcode

    1. private void btnDrehen_Click(object sender, EventArgs e)
    2. {
    3. zufallszahl1 = rnd.Next(7);
    4. zufallszahl2 = rnd.Next(7);
    5. zufallszahl3 = rnd.Next(7);
    6. txtZufallszahl1.Text = Convert.ToString(zufallszahl1);
    7. txtZufallszahl2.Text = Convert.ToString(zufallszahl2);
    8. txtZufallszahl3.Text = Convert.ToString(zufallszahl3);
    9. txtEinsatz.Text = Convert.ToDouble(zahl);
    10. if (zahl > 100)
    11. {
    12. MessageBox.Show("Der maximale Einsatz beträgt 100€");
    13. }
    14. }


    CodeTags gesetzt ~VaporiZed

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

    Hi!

    Bei der Fehlermeldung ​"Der Typ "double" kann nicht implizit in "string" konvertiert werden." muss man dann eine explizite Umwandlung durchführen.
    D.H. Du musst die Integer bzw. Double Variable nach String konvertieren, weil die TextBox Eigenschaft ​Text nur Strings verarbeiten kann!

    C#-Quellcode

    1. txtEinsatz.Text = CStr(Convert.ToDouble(zahl));

    oder

    C#-Quellcode

    1. ​txtEinsatz.Text = Convert.ToDouble(zahl).ToString;
    Willkommen im Forum.

    @Morrison: Ansdersrum. Das ist hier ne User-Eingabe, die verarbeitet werden soll.
    @VoodooVince: Um aus der TextBox txtEinsatz die Eingabe des Benutzers als Zahl weiterzuverarbeiten, muust Du den TextBox-Text hernehmen und diesen in eine Zahlenwert wie double oder int umwandeln. Das heißt, dass zahl das Zuweisungsziel sein muss, nicht Quelle der Daten. Also muss da stehen zahl = (irgendwas), nicht (irgendwas) = …zahl.
    Jetzt die Frage, wie man von einem string zu einem anderen Datentyp (z.B. double oder int) kommt. Dafür gibt es TryParse:

    C#-Quellcode

    1. bool UmwandlungIstÜberhauptMöglich = GewünschterZieltyp.TryParse(EingabetextDesBenutzers, VariableVomGewünschtenZieltypDieDenZahlenwertAufnehmenSoll);

    In C# gibt's wohl noch irgendwas mit As, aber Stichwort Eigenrecherche ;)
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VoodooVince
    Du kannst dir das TextBox1-TextChanged-Event abonnieren und in diesem Eventhandler alles tun, um die Eingabe zu prüfen. Dann musst du nicht nochmal in der Button-Prozedur prüfen.

    Dies ist zwar VB.NET, es sollte aber klar sein, was ich meine.
    • Wenn die Umwandlung des Strings nicht funktioniert, siehst du's an der roten Farbe.
    • Bei Eingaben über 100€ oder im negativen Bereich siehst du's auch an der roten Farbe.
    • Nur vernünftige Eingaben bestehen den Test.

    VB.NET-Quellcode

    1. Public Class FormMain
    2. Private Einsatz As Double
    3. Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
    4. If Double.TryParse(TextBox1.Text, Einsatz) Then
    5. If Einsatz <= 100.0 AndAlso Einsatz > 0.0 Then
    6. TextBox1.ForeColor = Color.FromArgb(0, 200, 0)
    7. Else
    8. TextBox1.ForeColor = Color.Red
    9. End If
    10. Else
    11. TextBox1.ForeColor = Color.Red
    12. End If
    13. End Sub
    14. End Class
    @VoodooVince Ebenfalls Willkommen im Forum. :thumbup:
    Zunächst finde ich in Deinem Snippet nirgend wo ein else.
    Dann:
    Arbeite mit Integer-Werten, nicht mit Strings.
    Wenn Du zahl umbenennst in einsatz und wenn Du Dir den Wert aus einem NumericUpDown-Control holst, musst Du den Maximalwert nicht testen, das übernimmt das Control für Dich.
    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!