Laden...

Fehlermeldung bei TextBox

Erstellt von Tez vor 17 Jahren Letzter Beitrag vor 17 Jahren 3.012 Views
T
Tez Themenstarter:in
12 Beiträge seit 2007
vor 17 Jahren
Fehlermeldung bei TextBox

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.

49.485 Beiträge seit 2005
vor 17 Jahren

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

T
Tez Themenstarter:in
12 Beiträge seit 2007
vor 17 Jahren

Danke Dir.

T
Tez Themenstarter:in
12 Beiträge seit 2007
vor 17 Jahren

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

49.485 Beiträge seit 2005
vor 17 Jahren

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

T
Tez Themenstarter:in
12 Beiträge seit 2007
vor 17 Jahren

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.

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo Tez,

was Syntaxfehler angeht, will ich dich trotz alledem auf Syntaxfehler selbst lösen (Compilerfehlermeldungen) verweisen.

herbivore

L
770 Beiträge seit 2006
vor 17 Jahren

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

T
Tez Themenstarter:in
12 Beiträge seit 2007
vor 17 Jahren

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.

L
770 Beiträge seit 2006
vor 17 Jahren

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

B
1.529 Beiträge seit 2006
vor 17 Jahren
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.

49.485 Beiträge seit 2005
vor 17 Jahren

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

T
Tez Themenstarter:in
12 Beiträge seit 2007
vor 17 Jahren

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!

L
770 Beiträge seit 2006
vor 17 Jahren

entweder du machst, wie herbivore gesagt, ein return nach den messageboxen.. oder du löscht die 2 zeilen ganz einfach.
lg

lg Lion

T
Tez Themenstarter:in
12 Beiträge seit 2007
vor 17 Jahren

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?

L
770 Beiträge seit 2006
vor 17 Jahren

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