Hallo zusammen,
ich erstelle ein Programm zur Berechnung von verschiedenen Zahlen.
Daher soll bei Eingabe von Buchstaben oder anderen Symbolen in die TextBox eine Fehlermeldung erscheinen, so dass das Programm nicht, wie jetzt, abstürzt.
Ich möchte also alles außer Zahlen abfangen, z.B. mit einer Nachricht "Bitte nur Zahlen eingeben".
muss man dafür eine neue Windows Form einfügen (für die Fehlermeldungsausgabe)
und ich denke mal, man muss das denn in der
if (ABC.Checked == true)
{
}
Prozedur dann sicher rein, oder?
Nun ist das Problem das ich nichts in der Suche und auch google nicht gnädig war mir zu sagen mit welchem Quelltext ich das nun ermöglichen kann.
Hoffe auf Hilfe, danke im Vorraus:
Tez.
Hallo Tez,
verwende zum Umwandeln int.TryParse bzw. double.TryParse.
Um eine Fehlermeldung anzuzeigen kannst du MessageBox.Show verwenden.
Siehe auch Anfängerfehler == true / == false
herbivore
Dein Link zu den Anfängerfehlern hilft mir leider nicht sonderlich.
Außer das, dass == true nicht wirklich von nöten ist.
Was soll ich denn mit dem double.TryParse umwandeln?
am anfang in der
if (Radiobutton.Checked == true)
{
double Uges = 0.0;
}
dort das double tauschen oder wie?
Und wie ich die message Box dann implementiere weiß ich leider auch nicht 😦.
Da muss man doch sicher irgendwie noch schreiben:
if (txtUges.Text = "Keine Zahl")
{MessageBox.Show = "Bitte richtige Zahl eingeben";}
so in etwa? Bloß das ich nicht weiß wie ich "keine Zahl" ausdrücken soll und das das MessageBox.Show = ".." auch nicht funktioniert.
Tez
Hallo Tez,
wenn du bei so grundlegenden Dingen Probleme hast (wir haben alle mal klein angefangen), dann muss ich dich bitte zuerst auf Galileo <openbook>: Visual C# 2005 von Andreas Kühnel oder ein Buch deiner Wahl verweisen, denn so grundlegende Fragen sprengen den Rahmen (sicher nicht die eine, aber bei der bleibt es dann ja erfahrungsgemäß nicht 🙂
Um trotzdem mal die grobe Richtung vorzugeben:
if (!double.TryParse (textBox1.Text, out myDouble)) {
MessageBox.Show ("Bitte geben Sie eine Zahl", "Die Eingabe entspricht nicht dem Format");
}
herbivore
Nunja, ich brauche während meiner 3 Jahre Lehre wohl nur 1x diese C# Programmierung, da nun das Fehlerabfangen das aller letze ist in meinem Programm was mir im moment noch fehlt, sehe ich es als nicht unbedingt notwenig mir dafür noch etwas zuzulegen.
Vll später aus Interesse.
Ich danke dir trotzdem für deine Hilfe, ich habe nun
if (!double.TryParse (txtUges.Text, out myDouble)) {
MessageBox.Show ("Bitte geben Sie eine Zahl", "Die Eingabe entspricht nicht dem Format"); //dein textbox1 in mein "txtUges" geändert
habe dies dann in die Berechnung von meinem URv eingefügt (wo man Uges als Variable braucht
if (RBURv.Checked == true) // URv Berechnung
{
double URv = 0.0;
double Uges = 0.0;
double Uz = 0.0;
Uges = Convert.ToDouble(txtUges.Text);
Uz = Convert.ToDouble(txtUz.Text);
URv = Uges - Uz;
txtErgebnis.Text = URv.ToString();
if (!double.TryParse (txtUges.Text, out myDouble))
{
MessageBox.Show ("Bitte geben Sie eine Zahl", "Die Eingabe entspricht nicht dem Format");
}
}
Dann bekomme ich lediglich eine Fehlermeldung:
Fehler 1 Typ- oder Namespacedefinition oder Dateiende erwartet.
Am vorletzen } in meinem Programm.
Du hast mir heute schon sehr geholfen zwinker.
Aber woran kann dies nun liegen und man beheben? Das wäre dann alles .. keine Sorge mit mehr Grundlegenden Fragen zugetextet zu werden grins
Gruß, Tez.
Hallo Tez,
was Syntaxfehler angeht, will ich dich trotz alledem auf Syntaxfehler selbst lösen (Compilerfehlermeldungen) verweisen.
herbivore
Hy,
mal ne andere frage, warum versuchst du das TryParse erst so spät?
du hast als ersten Befehl: Uges = Convert.ToDouble(txtUges.Text);, sollte txtUgex.Text keine Zahl sein mag dich dein Programm ja schon da nicht mehr?
lg
lg Lion
es waren nur 2 Klammern zuviel.
Ja Lion1984, du hast Recht danke, jetzt habe ich das direkt nach den double gesetzt.
Wenn ich nun Buchstaben eingebe gibt er schön die Fehlermeldung aus.
Einzige Problem ist wenn ich bei der Fehlermeldung auf ok klick schmierts danach trotzdem ab. Aber genau das will ich ja vermeiden. Die ausgabe der Fehlermeldung ist ja nur das Ergebnis davon.
double URv = 0.0;
double Uges = 0.0;
double Uz = 0.0;
if (!double.TryParse(txtUges.Text, out Uges))
{
MessageBox.Show("Bitte geben Sie eine Zahl ein", "Die Eingabe entspricht nicht dem Format");
}
if (!double.TryParse(txtUz.Text, out Uz))
{
MessageBox.Show("Bitte geben Sie eine Zahl ein", "Die Eingabe entspricht nicht dem Format");
}
Uges = Convert.ToDouble(txtUges.Text);
Uz = Convert.ToDouble(txtUz.Text);
URv = Uges - Uz;
txtErgebnis.Text = URv.ToString();
so siehts aus im moment.
das wäre auch ganz einfach erklärt..
du überprüfst 2 mal die Zahlen, und gibts dementsprechend eine Fehlermeldung aus.. aber wenn eine falsche Eingabe gemacht wurde, was hindert dein Programm das Parse trotzdem zu machen? du verwendest nach deinen beiden abfragen jeweils das parse, unabhängig davon, ob eine richtige Eingabe gemacht wurde.
Kurzfassung:
Uges = Convert.ToDouble(txtUges.Text);
Uz = Convert.ToDouble(txtUz.Text);
is die Wurzel des Bösen
lg
lg Lion
double Uges, Uz;
if (double.TryParse(txtUges.Text, out Uges) && double.TryParse(txtUz.Text, out Uz))
{
txtErgebnis.Text = (Uges-Uz).ToString();
}
else
{
MessageBox.Show("Bitte geben Sie eine Zahl ein", "Die Eingabe entspricht nicht dem Format");
}
Ansonsten gibt es auch noch das Control NumericUpDown.
Hallo Tez,
wenn du TryParse benutzt, brauchst du Convert.ToDouble nicht mehr. TryParse liefert das Ergebnis als out, wenn die Konvertierung möglich ist. Davon abgesehen solltest du vermutlich ein return machen, nachdem du den Fehler angezeigt hast.
herbivore
Das sehe ich jetzt auch 😉.
Da hast du Recht ..
also das Programm prüft ob die eingebenen Zeichen in der TextBox stimmen, und wenn nicht gibt es eine Fehlermeldung aus. Danach schmiert es aber trotzdem ab.
Was muss ich nun tun um das zu verhindern?
Diese Kenntnisse habe ich leider nicht 😦
Tez
EDIT: Ahh das war der Punkt den ich wissen musste, ich brauche Convert.ToDouble nicht mehr.
Jetzt gehts.
Riesen großen Dank!
entweder du machst, wie herbivore gesagt, ein return nach den messageboxen.. oder du löscht die 2 zeilen ganz einfach.
lg
lg Lion
Nachdem ihr mir so großartig geholfen habt hätte ich noch eine Verständnisfrage,
also der Ausdruck "TryParse" nimmt den vorher eingegebenen double Wert und versucht ihn zu konvertieren.
Macht also eigentlich genau das gleiche wie
abc = Convert.ToDouble.
Könnte man dann nicht auch
if (Uges = Convert.ToDouble(txtUges.Text))
{MessageBox.Show("abc");}
machen?
TryParke konvertiert es doch auch nach double oder nicht?
TryParse versucht, einen Wert zu konventieren.. ist dieses erfolgreich, steht er in der out Variablen zur verfüng. und jenachdem ob die Konventierung erfolgreich war, gibt TryParse True oder False zurück.
zB bei einem Text würde TryParse false zurück geben, bei Parse hängt sich dein programm auf. steht aber alles in der doku.. wie auch oben erwähnt.
lg
lg Lion