Ja, ich weiss, die Frage ist eigentlich beantwortet, aber ich will trotzdem meinen Senf dazugeben:
Alle bisherigen Antworten drehen sich darum, eine fehlerhafte Eingabe zu verhindern. Das wird gerne mit OnKeyDown gemacht, so dass "falsche" Zeichen gar nicht erst im Edit-Feld landen, und um den User fuer seine Dummheit zu bestrafen auch noch gerne mit nerviger Piepserei verbunden. Noch toller ist es, wenn der Cursor dann noch in einem Eingabefeld haengen bleibt, bis man dort einen gueltigen Wert eingegeben hat.
Ich persoenlich hasse solche Programme und bevorzuge es, erstmal alle Eingaben zu erlauben, sie zu parsen und dann Fehler hervorzuheben. Das sieht dann so aus:
Delphi-Quellcode:
procedure TMyForm.ed_ANumberOnChange(Sender: TObject);
var
ed: TEdit;
Value: integer; // alternativ: extended;
begin
ed := Sender as TEdit;
if not TryStrToInt(ed.Text, Value) then begin // alternativ: TryStrToFloat
ed.Color := clYellow;
SomeAction.Enabled := false;
end else begin
ed.Color := clWindow;
SomeAction.Enabled := true;
end;
end;
Es wird also die Hintergrundfarbe des TEdit auf Gelb (Rot ist schlechter lesbar) gesetzt, wenn die Eingabe fehlerhaft ist, sonst wieder auf Weiss (nicht vergessen). Ausserdem werden Actions, die diese Eingabe benutzen, disabled.
Meine User moegen diese Art der Hervorhebung, aber alternativ oder ergaenzend zur Hintergrundfarbe kann man auch andere visuelle Hinweise geben, z.B. kann man in der Statuszeile oder als Hint des Controls eine Fehlereldung anzeigen.
Microsoft hatte mal ein blinkendes Ausrufezeichen rechts neben dem Eingabefeld eingefuehrt (war das mit dotNET?), das hat auch die JVCL implementiert. Diese Mode scheint aber inzwischen wieder out zu sein.
Was absolut nervt ist, wenn ein Tastendruck einfach nur ignoriert oder mit einem Piepsen quittiert wird, ohne dass man sieht, was das Problem ist.
twm