In Eingabe (Cstring) nur Zahlen erlauben
-
Hi,
ich habe ein Eingebefeld mit einer CString Membervariablen m_an1.
Als Eingebewerte sollen nur Zahlen zwischen 0 bis 255 oder das
Leere Feld erlaubt sein erlaubt sein (leer bedeutet nicht 0).
Hat jemand einen Tipp wie ich das machen kann?
So nimmt er auch Buchstaben aber ich weiß nicht warum.if (m_an1 != "" && atoi(m_an1) >= 0 && atoi(m_an1) <=255)
THX CU Alexo
-
Hi hi,
habe gerade was auf die schnelle geschrieben damit bekommst du nur zahlen 0123456789 angezeigt. Wenn du einen Buchstaben einsetzen solltest wird das Zeichen gelöscht und eine Fehlermeldung kommt. Die Funktion macht das ganz einfach es fragt einfach das Charzeichen bzw. den Code davon ab. Liegt er zwischen 48 und 57 ist es eine Zahl andernfalls muss ein ein anderes Zeichen sein. Den Code kannst du ja verveinern ist ja nur ein Ansatz.mfg

HellsgoreCString strEdit; int iEditString; char cEdit; DeineMemberVar.GetWindowText(strEdit); iEditString = strEdit.GetLength(); if (iEditString != 0) { cEdit = strEdit[iEditString-1]; for (int i = 48; i <= 57; i++) { if (cEdit == i ) break; else { if (i == 57) { MessageBox("Nur Zahlen im Bereich von \n0 - 2147483647 eingeben.", "Falscher Eingabetyp", MB_ICONINFORMATION | MB_OK); DeineMemberVar.SetSel(iEditString -1, iEditString, FALSE); DeineMemberVar.Clear(); } } } }
-
Noch zu deinem Code:
if (m_an1 != "" && atoi(m_an1) >= 0 && atoi(m_an1) <=255)Deine Syntax ist Richtig das auf jedenfall. Nur allerdings fragst du nur die Zahlenwerte ab. Schau mal genauer hin dann siehst du das du in der ersten Anweisung das Leerzeichen abfragst und dann nur noch ob die Zahl grösser NULL oder kleiner 255 ist. Da ein String bzw. ein Char bei atoi auch eine Zahl rausspuckt wird deine Bedingung wahr.
Geb mal einen Buchstaben ein und guck dir mal das Ergebnis von atoi(m_anl) an, dann siehst du das.
Hellsgore

-
Danke schonmal für die schnelle Antwort ich werds gleich mal testen.

-
Hi, wollte mich mal kurz zwischenschalten, wei bei mir gehts um was ähnliches....
Ich hab ein CEdit-Steuerelement in einem Dialog, un mit dem Klassen-Assistent hab ich eine float -Variable damit verknüpft. Wenn ich das gut e Stück jetzt mit ner groooooooßen Zahl initalisiere zeigt mir das Eingabefeld die Zahl im Scientific-Modus an....ich will die aber ausgeschrieben haben, also fixed...
Hab ich was übersehen oder is das echt so schwer....denn das is tierisch praktisch, wenn man das nämlich auf double stellt, übernimmt MFC, die Kontrolle ob nur Zahlen eingegeben wurden...
Also Danke schonmal....bis bald
-
Formatier die Zahl doch vorher.
m_strEditFeld.Format(_T("%10.5d"), fDieKommazahl);Damit kriegst du ja bekanntlich was in der Art: 99999.9999
Damit sollte deine Zahl auch wieder wie gewünscht aussehen.
-
Danke, ich probiers mal, das Verfahren kannte ich noch nicht.
Also bis zum nächsten mal, wenn ich mal wieder nix in der Online Hilfe finde!Tschö
Öh, also ich glaub da haste was falsch verstanden: (habs gerade nochmal angeguckt):
Meine Member-Variable, die mit dem CEdit verknüpft ist, ist vom Typ float.
So in der Art: float m_fEasting; Das ist praktisch, da MFC bei der Eingabe gleich prüft ob es eine Zahl is oder Text.
Bei Deiner Lösung müsste ich eigentlich ne Member-Var vom Typ CString haben, oder?
Das wär halt umständlich, da ich dann ne Typumwandlung machen muss, denn ich muss mit dem Wert auch noch was berechnenAber ich probiers trotzdem, irgendwie wirds shon gehen.
