In C# nur Zahlen zulassen?
Ich schreibe gerade ein Programm und möchte wenn ein Buchstabe oder ein Sonder zeichen eingegeben wird eine Fehlermeldung ausgeben.
Aber ich weiß nicht wie ich das mache, danke schonmal bin noch ein Anfänger;)
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.
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:
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();
}
}
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.
Ich glaube davon bin ich noch weit entfernt, habe gerade einmal angefangen, unten steht der Code.
https://msdn.microsoft.com/de-de/library/7f0ddtxh(v=vs.110).aspx
Hilft dir das? Ansonsten wär ein Minmalbeispiel ganz hilfreich.
Nimm int.TryParse statt Convert.ToInt32 . Warte, ich zeige dir das eben
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
}
//Ü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.