Nur Nummern in EditBox



  • Ich hätte es gerne so, dass man in eine EditBox nur Zahlen und das ganze drumrum, also Punkt (für Komma), wie z.B. 4.56, schreiben kann.

    Kann man auch irgendwie überprüfen, ob ein String eine Zahl ist oder nicht? IsDigid gibt nur zurück, ob es eine Zahl ist, wenn allerdings 4.56 geschrieben wird, dann ist es laut isDigid keine Zahl mehr.



  • Die klassische Antwort auf die erste Frage wäre, dem Edit den Style ES_NUMBER mitzugeben. Aber der funktioniert nur mit positiven ganzen Zahlen.

    Damit fallen mir zwei Optionen ein:
    - du lässt jede Eingabe zu und filterst hinterher, ob die Eingabe eine sinnvolle Zahl ergibt
    - ein Subclassing auf das Editcontrol gibt dir die Kontrolle, was eingegeben werden kann. Ist aber halt mehr Arbeit, weil du die Syntax selbst programmieren musst.

    Die klassischen C-Funktionen wie atoi(), atodbl() usw., um Texte in Zahlen umzuwandeln, nutzen nichts?





  • Danke für die Links.

    Ich habe mir mal deinen (@FSK) ersten Schrägstrich angeschaut und mal versucht das zu realisieren. Es klappt. Die Funktion "string GetValidNumber(string Number)", so habe ich sie genannt, bekommt eine Zahl und prüft in einer while-Schleife durch mehrere If-Abfragen, ob die Zahl denn auch wirklich eine ist. Die Funktion GetValidNumber gibt immer etwas zurück. Ist die Zahl z.B. "3..", so wird ein "inf" zurückgegeben und die Rechnung wird beendet. Die Funktion braucht allerdings nicht kontrollieren, ob ein Buchstabe eingegeben wurde, das passiert in einer vorherigen Abfrage.
    (Ich hoffe, dass der Code nicht unsauber ist. Ich würde mich auch sehr über eine Rückmeldung, die einen Verbesserungsvorschlag gibt/eine Unsauberkeit im Code zeigt, freuen.)

    string GetValidNumber(string Number)
    {
    	int i = 0;
    	string sOut = "";
    	bool decimal = false;
    	while (i <= Number.length())
    	{		
    		if (isdigit(Number[i]))
    		{
    			sOut += Number[i];			
    		}
    		else if (Number[i] == '.' and i == 0)
    		{
    			decimal = true;
    			sOut += string("0") + Number[i];
    		}
    		else if ((Number[i] == '+' or Number[i] == '-') and i == 0)
    		{
    			sOut += Number[i];
    		}
    		else if (Number[i] == '.' and i > 0 and decimal != true)
    		{
    			decimal = true;
    			sOut += Number[i];
    		}
    		else if ((Number[i] == '.' and decimal == true) or (Number[i] == '+' and i != 0) or (Number[i] == '-' and i != 0))
    		{
    			sOut = "inf";
    		}
    		i++;
    	}
    	return sOut;
    }
    

Log in to reply