Nur bestimmte Zeichen im Editfeld ?
-
Hallo zusammen.
Was muß ich anstellen, damit in einem Editfeld nur bestimmte Zeichen zugelassen werden?
Z.B.: a,b,c und Leerstellen sind erlaubt, alles andere nicht!Danke schon mal
-
Hi
fang doch einfach die EN_CHANGE Nachricht ab und überprüf ob nur erlaubte Zeichen im Editfeld vorhanden sind.Grüße Rapha
-
Aber wie erhalte ich das gerade eingetippte Zeichen und gebe ein NullZeichen zurück wenn es keins der ausgewählten ist ?
Wen's geht etwas genauer bin noch Beginner!
-
Hi,
also ich hab das mal so gemacht:
erstmal Die PreTranslateMessage function überschrieben//******************************* //Die überschriebene PreTranslate Funktion BOOL CTerminOrganisatorDlg::PreTranslateMessage(MSG* pMsg) { //Definition CString CharPressed; CWnd* DeinEditFeld = GetDlgItem(IDC_DEINEDITFELD); //So bekommst du ein Handle auf das Editfenster //Wenn dein Editfeld den focus hat und deine Eingabe (WM_CHAR) gemacht wurde if(pMsg->message == WM_CHAR && this->GetFocus() == DeinEditFeld ) { CharPressed.Format("%c",pMsg->wParam); //wParam gibt den gedrückten Wert wieder, also a, b,c, 1,2,3 etc if(CharPressed !='1' && CharPressed !='2' && CharPressed !='3' && CharPressed !='4' && CharPressed !='5' && CharPressed !='6' && CharPressed !='7' && CharPressed !='8' && CharPressed !='9' && CharPressed !='0' && CharPressed !=',' && CharPressed !='.') return 1; //Wenn nicht eine zahl von 0-9 oder . oder , eingegeben wurde, dann message nicht weiter leiten } //WEnn es eine andere Message ist weiterleiten else { return CDialog::PreTranslateMessage(pMsg); } }Falls ich irgendwelche Fehler gemacht hab, es viel einfacher geht oder das ganze gar unmöglich is
sagt es mir bitte
-
- EN_CHANGE abfangen
- Bool'sche Funktion aufrufen
- letzes Zeichen auslesen
- überprüfen
- TRUE zurückgeben wenn OK, FALSE wenn nicht
Wäre mein Vorschlag

-
Wäre einfacher, hab ich auch erst ausprobiert...hat bei mir jedoch immer zu Problemen geführt. Wurde immer ein zeichen verschluckt und sowas. ich gebe allerdings zu, das ich wahrscheinlich nur zu blöd war, das ganze Richtig zu machen
Wenn es funzt, is es bestimmt praktischer (und kürzer)
-
Also ans letzte Zeichen zu gelangen sollte etwa so funktionieren.
str.Delete(0,str.GetLength()-1); // bei CString
-
Hab jetzt so gemacht!
Erlaub sind nur 123456789 Space und Rückschritt!BOOL myApp::PreTranslateMessage(MSG* pMsg) { CString KeyPressed; CString Key = "1234567890abcdef "; //<- Erlaubte Zeichen int KeyAscii; CWnd* EditFeld = GetDlgItem(IDC_myEDITFELD); //<-Hier das Editfeld angeben if(pMsg->message == WM_CHAR && this->GetFocus() == EditFeld ) { KeyAscii = pMsg->wParam; KeyPressed.Format("%c",KeyAscii); if(Key.Find(KeyPressed,0) == -1 && KeyAscii != 8) return 1; } else { return CDialog::PreTranslateMessage(pMsg); } }