textBox auf unerlaubte oder erlaubte Zeichen prüfen -=gelöst=-
-
Hallo Leute !
Was ich vorhabe:
Ich würde gerne prüfen lassen, ob der string in der TextBox ein nicht erlaubtes Zeichen enthält.
und das wenn ein button gedrückt wird.
mein Programm arbeitet "eigentlich" nur mit double werten in der textbox eingabe. Daher möchte ich halt auch eine exception schreiben für den Fall dass ein nicht erlaubtes Zeichen in dem String vorhanden ist.Mein Lösungsansatz bisher:
try { // das was er machen soll wenn Richtige Eingabe erfolgt } catch ( ???????? ) // prüfen ob der String ein nicht erlaubtes Zeichen enthält { // Das was er machen soll wenn falsche Eingabe gemacht wurde }
ich könnte mir natürlich auch ein Array basteln welches die erlaubten Zeichen enthält:
char erlaubt[13] = {'1','2','3','4','5','6','7','8','9','0','-',','};
allerdings wäre es dann ja bestimmt vorteilhafter die nicht erlaubten Zeichen in ein Array zu packen. Aber das sind
extrem viele und ich glaube das gibts eine wesentlich kürzere Lösung.
Man müsste ja dann quasitextBox1->Text
auf die nicht erlaubten elemente prüfen. Aber wie mache ich das?
Mein Problem:
Ich kenne den Ausdruck nicht , den ich bei catch angeben muss um zu prüfen ob sich ein nicht erlaubts Zeichen in der
TextBox befindet. und ich weiss nicht genau ob der Ansatz ok ist. Aber weniger sicher bin ich mir halt bei dem Ausdruck.Edit: Ich habe mal die Fragestellung präzisiert.
-
Verwende einfach die Double.Parse() bzw. noch besser die Double.TryParse()-Methode, um zu überprüfen, ob sich ein gültiger double-Wert dort befindet.
P.S. Titel sollte eigentlich "TextBox auf Double-Wert prüfen" heißen...
-
//Eingabefehler abfangen bool FehlerAbfangen (String ^Eingabe) { bool Fehler = false; if (Eingabe != String::Empty) { try { Convert::ToDouble(Eingabe); } catch (...){ MessageBox::Show("Eingabefehler\n\rnur numerische Eingaben","Fehler",MessageBoxButtons::OK,MessageBoxIcon::Error); //textBoxLinkLaenge->Clear(); Fehler = true; } } return (Fehler); }
-
Zunächstmal danke für die Antworten.
was die Funktion Double::TryParse angeht:
Ich habe diese versucht und habe es folgendermassen geschrieben:
double g, h; textBox3->Clear(); g = Double::TryParse(textBox1->Text,g); h = Double::TryParse(textBox1->Text,h); double end = g * h / 2; textBox3->AppendText("Der Flächeninhalt des Dreiecks lautet :\r\n"); textBox3->AppendText(end);
und er gibt mir eine Fehlermeldung ala :
error C2664: 'System::Windows::Forms::TextBoxBase::AppendText': Konvertierung des Parameters 1 von 'double' in 'System::String ^' nicht möglich
Es ist kein benutzerdefinierter Konvertierungsoperator verfügbar, oder
Es ist keine Standardkonvertierung von der mittels Boxing geschachtelten Form des arithmetischen Typs in den Zieltyp vorhanden.Was mache ich da falsch? Der Fehler soll in der Zeile "textBox3->AppendText(end);" sein. Was ich mir noch gedacht habe war, dass man erst 2 bool variablen bastelt und diese dann gleich der tryparse methode setzt. also so:
bool result,result2; double g,h,end; result = Double::TryParse(textBox1->Text,g); result2 = Double::TryParse(textBox2->Text,h); if ( result == true && result2 == true) { end = g*h/2; textBox3->Clear(); textBox3->AppendText("Flächeninhalt lautet :\r\n"); textBox3->AppendText(end); } else { textBox3->Clear(); textBox3->AppendText("Bitte richtige eingabe machen."); }
Ich habe ja gelesen dass der Rückgabewert der funktion ein bool ist. daher habe ich result und result2 gleich der funktionsanalyse gesetzt, damit diese beiden bool variablen dann den wert true oder false haben den ich brauche.Aber trotzdem schmeisst er mir den selben Fehler an den Kopf. Wo ist mein Fehler?
Und bei dem Beispiel von foxviper kommt mir folgende Frage:
1. Was käme dann in den Ausdruck bei catch hinein? Denn nun ist ja die Sache mit den erlaubten und unerlaubten Zeichen noch nicht gelöst.
-
Ok Leute ich hab nun eine Lösung gefunden.
Ich habe es mir bisher zu schwer gemacht. Warum sollte man falsche Zeichen mühevoll abfragen wenn man sie doch von vorneherein verbieten kann ?
d.h. ich habe in der TextBox den Event KeyPress gesucht und folgendes in dessen Anweisungsblock geschrieben:
if(!Char::IsNumber(e->KeyChar) && e->KeyChar != 0x08 && e->KeyChar != 0x2C && e->KeyChar != 0x2D) e->Handled = true;
mit IsNumber decke ich alle Zahlen ab. und die anderen Zahlen nach dem != stehen für Backspace, Komma und Minus. So erlaube ich alle meine Zeichen die ich brauche und verbiete den rest.
Ich hätte mich genauer ausdrücken sollen, was ich vorhabe. Eventuell hätte man mich dann auch auf diesen "Workaround" aufmerksam gemacht.