In C# nur Zahlen zulassen?

6 Antworten

Konsole oder grafische Oberfläche?

Grafische Oberfläche: MaskedTextBox

Konsole: Abschluss der Eingabe abwarten oder schon bei Nicht-Zahl Signal geben?

Bei Abwarten:

// using-Direktiven müssen ganz oben stehen
using System;
using System.Globalization;

...
...
...

      Double zahl; Boolean zahlIstGültig;
      while(true) {
        zahlIstGültig = Double.TryParse(Console.ReadLine(), NumberStyles.Any, CultureInfo.CurrentCulture, out zahl);
        if (zahlIstGültig) { break; }
        // Fehlermeldung
      }

Für sofortige Meldung müsstest du die Konsoleneingaben per Console.ReadKey() selbst bearbeiten und zusammensetzen.

Woher ich das weiß:Berufserfahrung – Software-Entwickler

Hallo, wo hast du die Eingabe? In einer TextBox?

// TextBox =>

Füge die KeyPress Event hinzu zu diese:

private void textBox_KeyPress(object sender, KeyPressEventArgs e)
{
   if(!char.IsControl(e.KeyChar)&&!char.IsDigit(e.KeyChar)&&(e.KeyChar!= '.'))
   {
       // Akzeptiere den Key
       e.Handled = true;
   }
  else{
       // Falsche Key nur Ziffern erlaubt
        //e.Handled = false;, Die Ziffer wird nicht geschrieben
  }
     // erlaube nur einen Dezimalpunkt
     if((e.KeyChar=='.')&&((sender as TextBox).Text.IndexOf('.')>-1))
   {
     // Akzeptiere den Key
     e.Handled = true;
   }
}

Oder benutze numericUpDown:

https://msdn.microsoft.com/en-us/library/system.windows.forms.numericupdown%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

LG

Franz | 15

Hi,

deine Frage hast du zwar vor ein paar Jahren gestellt, aber ich antworte trotzdem hierauf. Und falls du das nicht lesen solltest, könnte ich vielleicht anderen damit helfen.

Auf jeden Fall habe ich mal das Programm programmiert und ausprobiert. Es funktioniert. Zur Kenntnis: Ich habe das Programm mit einem while-Loop programmiert, damit es immer von vorne beginnt. Du kannst das natürlich auch weglassen bzw. die Funktion entfernen.

Wenn man nun bei der ersten Aufforderung "Geben Sie Ihren Geldbetrag ein" z. B. einen Buchstaben eintippt, erscheint eine Fehlermeldung, so wie du das haben wolltest. Ich habe alles, was danach folgt, in einer großen If-Anweisung sozusagen gepackt, in der weitere If-Anweisungen, die du programmiert hast, drinstehen.

Mit dem C#-Programmieren habe ich seit Kurzem begonnen und es macht mir so viel Spaß, dass ich gar nicht mit dem Lernen aufhören kann. :-) Ich bin gespannt, was es noch zu entdecken gibt.

Viel Spaß mit dem Programm und weiterhin mit dem Programmieren.

Hier ist der Quellcode:

while(true)
            { 


                Console.WriteLine("############################");


                Console.WriteLine("# Mehrwertsteuer-Berechner #");


                Console.WriteLine("############################");






                Console.Write("Geben Sie Ihren Geldbetrag ein: ");
                string InputNumber = Console.ReadLine();








            if (!int.TryParse(InputNumber, out int InputNumber1))
            {
                Console.WriteLine("Ungültige Eingabe.");




            }
            else
            {




                Console.WriteLine("Handelt es sich bei Ihrem Produkt um ein Lebensmittel? [j/n]");
                string zwei = Console.ReadLine().ToLower();


                if (zwei == "j")


                {


                    Console.WriteLine("Der Steuerbetrag: {0}", InputNumber1 * 0.10);


                }


                else if (zwei == "n")


                {


                    Console.WriteLine("Der Steuerbetrag: {0}", InputNumber1 * 0.20);


                }


                else 


                {


                    Console.WriteLine("Ungültige Eingabe!");


                    
                }
                    


                






            }
                Console.ReadKey();
            }
            
        }
Woher ich das weiß:Hobby

Du kanns den Key einlesen lassen, und dessen Wert in einem switch-case auswerten. Dabei kannst du herausfinden welche Taste gedrückt wurde und reagieren.


Csgoisnotacrime 
Beitragsersteller
 23.05.2018, 21:28

Ich glaube davon bin ich noch weit entfernt, habe gerade einmal angefangen, unten steht der Code.

0

https://msdn.microsoft.com/de-de/library/7f0ddtxh(v=vs.110).aspx

Hilft dir das? Ansonsten wär ein Minmalbeispiel ganz hilfreich.


Csgoisnotacrime 
Beitragsersteller
 23.05.2018, 21:27

 //Überschrift

      Console.WriteLine("############################");

      Console.WriteLine("# Mehrwertsteuer-Berechner #");

      Console.WriteLine("############################");

      //Fragen

      Console.Write("Geben Sie Ihren Geldbetrag ein: "); //when input is following after a write use only Console.Write() so it looks better

      int inputNumber = Convert.ToInt32(Console.ReadLine());

       

      Console.WriteLine("Handelt es sich bei ihrem Produkt um ein Lebensmittel? [j/n]");

      //Zuweisung

      string zwei = Console.ReadLine().ToLower(); //.ToLower() is only for advanced programmers

      if (zwei == "j")

      {

        Console.WriteLine("Der Steuerbetrag: {0}", inputNumber * 0.10);

      }

      else if (zwei == "n")

      {

        Console.WriteLine("Der Steuerbetrag: ", inputNumber * 0.20);

      }

      else

      {

        Console.WriteLine("Ungültige Eingabe!");

      }

     

      Console.ReadKey();

Der Code, und wenn bei der ersten Frage keine Zahl eingegeben wird, soll eine Fehlermeldung kommen.

0
minearth  23.05.2018, 21:32
@Csgoisnotacrime

Ersetze

int inputNumber = Convert.ToInt32(Console.ReadLine());

durch

if(!int.TryParse(Console.ReadLine(), out int inputNumber))
{
    Console.WriteLine("Ungültige Eingabe");
    return; // oder irgendwas anderes
}
0