Nur Zahlen
-
Hallo liebe Community,
ich würde gerne die Eingabe einer Textbox auf Zahlen und ein Komma begrenzen: {0-9/","}
Aber ich bekomme das leider mit der Funktion nicht hin..
Könnt ihr mir bitte helfen? Und welche Libs muss ich für length() und IsDigit() einbinden?
//Nur bestimmt Zeichen in TextBox erlauben double just_digits(String string) { int string_length = length(string); double just_digits; for(int index=0; index<=string_length-1; index++) { if(IsDigit(string[index]) || string[index] == ","){just_digits += System::Convert::ToDouble(string[index]);} //IsDigit(string, index) } return just_digits; }
Viele Grüße,
SushiBiene
-
-
Hier..., aber Doppelposting ist net i.O., auch net als SushiBiene
private: System::Void textBox1_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e) { // Diese Zeichen steht für die tase BS, die Löschtaste... if(e->KeyChar == '0' || e->KeyChar == '1' || e->KeyChar == '2' || e->KeyChar == '3' || e->KeyChar == '4' || e->KeyChar == '5' || e->KeyChar == '6' || e->KeyChar == '7' || e->KeyChar == '8' || e->KeyChar == '9' || e->KeyChar == ',' || e->KeyChar == '') { String^ zeichen = String::Empty;//Ein String um den Text der TextBox aufzunehmen int komma = 0;//Ein int um zu prüfen, ob schon ein Komma im Text steht zeichen = textBox1->Text;//Den Text der TextBox an String^ zeichen übergeben if (e->KeyChar == ',')//Prüfen ob gerade ein Komma eingegeben wird { //Prüfen ob schon ein Komma im Text steht, könnte ja auch wieder gelöscht worden sein. //Den Wert an komma übergeben. -1 kein Komma, größer als -1 Komma vorhanden komma = zeichen->IndexOf(',',0,textBox1->TextLength); if(komma != -1)//Wenn der Wert Größer als -1 ist, steht schon ein Komma im Text. { e->KeyChar = 0; } } } else { e->KeyChar = 0; } }
Gruß, Doug_HH
-
@Doug_HH Vielen Dank, du hast du mir damit wirklich sehr geholfen!
Mfg, SushiBiene
-
Soweit sogut,
scheint auch alles korrekt zu sein,
jedoch spuckt VisualStudio mir beim kompillieren folgendes aus:-error C2065: 'e': nichtdeklarierter Bezeichner -error C2227: Links von "->KeyChar" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden. -error C2039: 'TextLength': Ist kein Element von 'System::String' c:\windows\microsoft.net\framework\v2.0.50727\mscorlib.dll: Siehe Deklaration von 'System::String'
Mfg, SushiBiene
-
zu 1. Und, gibt es e? Hast Du den Parameter vielleicht anders genannt? Code zeigen!
zu 2. Ist ein Folgefehler aus 1.
zu 3. Ist textBox1 ein String? Warum?Allgemein kann man die If-Abfrage etwas eleganter gestalten:
if (Char::IsDigit(e->KeyChar) || e->KeyChar == ',')
Das letzte Zeichen in Doug's Beispiel kann ich leider nicht erkennen. Ist das ein Backspace? Evtl. noch dieses hinzufügen:
Char::IsControl(e->KeyChar)
Und statt dem System ein Nullcharacter vorzusetzen (
e->KeyChar = 0
), sollte man das Ereignis als bereits behandelt kennzeichnen (e->Handled = true
).
-
Danke LordJaxom!,
funktiniert jetzt alles,
aber gibt es eine Möglichkeit, das als eine Funktion zu schreiben, die von mehreren textBoxen angesteuert werden kann?
zeichen = textBox1->Text; //Den Text der TextBox an String^ zeichen übergeben
Dann müsste man den die textBox irgendwie an die Funktion weitergeben.
Mfg, SushiBiene