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);
        }
    }
    

Anmelden zum Antworten