Falsche Eingabe abfangen



  • Hallo,
    wie ich kann ich eine falsche Abfrage bei einem Edit Fenster abfangen? Wenn ich in dieses beispielsweise integer Zahlen eingeben muss, doch der Nutzer gibt Zeichen ein. Dann wird immer eine Exeption ausgelöst. Wie kann ich solch eine Falscheingabe einfach abfangen?

    Vielen Dank



  • Mittels try/catch. Oder auch mit AnsiString::ToIntDef(), wenn es einen Wert gibt, dessen Eingabe du im TEdit ausschließen kannst.

    Gruß KK



  • Hallo

    Am besten ist es, Falscheingaben von begin an zu verhindern. Hier findest du Beispiele.

    bis bald
    akari



  • Bei OnKeyPress() musst du sowas eingeben:

    // Zugelassen Zeichen bei der Eingabe: 1,2,3,4,5,6,7,8,9,0, und
        // "Backspace". Alle anderen werden ignoriert.
        // "Backspace" hat den dezimalen Wert 8;
    
        int bs= 8;
    
        if ((Key!= '0') && (Key!= '1') &&
            (Key!= '2') && (Key!= '3') &&
            (Key!= '4') && (Key!= '5') &&
            (Key!= '6') && (Key!= '7') &&
            (Key!= '8') && (Key!= '9') &&
            (Key!= bs)  && (Key!= '-')
           )
        {
         Key= '\0' ;
        }
    


  • Ok, danke! Habt mir geholfen.



  • Hallo

    @ sonic : Für die nicht druckbaren Zeichen sollte man aber nicht die ASCII-Codes fest programmieren, sondern am besten die WinAPI-Keycodes benutzen,

    bis bald
    akari



  • akari schrieb:

    Am besten ist es, Falscheingaben von begin an zu verhindern.

    Ich finde, da lässt sich drüber diskutieren. Alleine wegen der Zwischenablage. Wenn man denn anschließend sowieso noch prüfen muss, kann ich mir die Arbeit mit der Eingabebeschränkung auch gleich sparen.

    Gruß KK



  • eventuell noch ein Weg der mir ehrlich gesagt am besten gefällt.

    SetWindowLong( Edit1->Handle, GWL_STYLE, GetWindowLong( Edit1->Handle, GWL_STYLE) | ES_NUMBER);
    


  • Aber auch damit kann man (leider) nicht verhindern, daß man mit "Paste" (Ctrl+V) Buchstaben oder Sonderzeichen eingeben kann, aber als einfache Alternative für eine numerische EditBox aber gut geeignet.



  • Th69 schrieb:

    Aber auch damit kann man (leider) nicht verhindern, daß man mit "Paste" (Ctrl+V) Buchstaben oder Sonderzeichen eingeben kann, aber als einfache Alternative für eine numerische EditBox aber gut geeignet.

    Dafür gibt es aber auch eine Lösung.
    http://www.bytesandmore.de/rad/cpp/snipp/sc02025.php



  • VergissEs schrieb:

    Dafür gibt es aber auch eine Lösung.
    http://www.bytesandmore.de/rad/cpp/snipp/sc02025.php

    Und wo ist da jetzt der Unterschied zu dem Link den akari gepostet hat? Und wie kommst Du darauf, dass damit das Problem mit der Zwischenablage behoben ist?



  • Joe_M. schrieb:

    Und wo ist da jetzt der Unterschied zu dem Link den akari gepostet hat?

    Oh großes SORRY, habe leider nicht gesehen das akari den Link schon geposted hat.

    Joe_M. schrieb:

    Und wie kommst Du darauf, dass damit das Problem mit der Zwischenablage behoben ist?

    weil im unteren Teil der Seite auf die Behandlung der Botschaft WM_PASTE eingegangen wird.



  • Hallo

    Im unteren Teil des verlinkten Artikels geht der Autor auch auf das Problem der Zwischenablage ein, und zeigt eine Lösung. Letztendlich läuft es auf eine zusätzliche manuelle Prüfung hinaus, womit Kobolds Einwand soweit richtig ist.

    bis bald
    akari



  • Ach ja ab RAD 2009 gibt es bei TEdit die Eigenschaft NumbersOnly das auf true gesetzt und im Eingabefeld kann nur noch Zahlen eingegeben werden auch die Zwischenablage wird berücksichtigt (mit automatischen Hint Fehlermeldungen)

    Leider kann man damit nur Ganzzahlen eingegeben
    eine Dezimalpunkt ist nicht zulässig was die Nutzung sehr beschränkt.



  • Super! Vielen Dank. Habt mir geholfen

    lg



  • Hallo,

    Allgemein habe ich die Erfahrung gemacht, das die Eingabe von Zahlen, allgemein nicht befriedigend ist.

    @Vergisses:
    Nicht nur der Dezimalpunkt ist ein Problem, nein für alle möglichen Eingabeformate der normalen Mathematik gibt es keine einfachen TEdit-Versionen, noch nicht mal mit LMD-Tools. Ich glaube es liegt daran, dass das gute alte Return nach einer Eingabe nicht mehr berücksichtigt wird. Erst dann kann wirklich die Gültigkeit einer Eingabe geprüft werden.

    Gruß Rudi


Anmelden zum Antworten