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


Anmelden zum Antworten