![]() |
Delphi-Version: 10 Seattle
TEdit NumbersOnly, Meldung nicht anzeigen
Hallo,
kann ich irgendwie verhindern, dass bei einer Falscheingabe in mein Editfeld mit NumbersOnly die Windowsmeldung ("Unzulässiges Zeichen...") angezeigt wird? Danke |
AW: TEdit NumbersOnly, Meldung nicht anzeigen
Statt NumbersOnly zu setzen mach das einfach im OnKeyPress:
Delphi-Quellcode:
procedure TForm2.Edit1KeyPress(Sender: TObject; var Key: Char);
begin if Not CharInSet(Key, ['0'..'9']) then Key := #0; end; |
AW: TEdit NumbersOnly, Meldung nicht anzeigen
Nicht "statt" sondern "zusätzlich",
sonst komm ich und benutze Strg+V oder Kontextmenü\Einfügen. |
AW: TEdit NumbersOnly, Meldung nicht anzeigen
Danke, wollte halt auf die "schnelle" die Meldung unterdrücken ;-)
Dann muss ich noch den Backspace zulassen und dann sollte es funktionieren |
AW: TEdit NumbersOnly, Meldung nicht anzeigen
Und [Entf] und eventuell [-] und ...
|
AW: TEdit NumbersOnly, Meldung nicht anzeigen
Zitat:
Zitat:
über on KeyDown hat man das größtenteils selber in der Hand... Die einfachste Lösung um grundsätzliches Editieren zu erlauben sieht dann so aus:
Delphi-Quellcode:
Damit kann im Edit ausgeschnitten, eingefügt und gelöscht werden. Zusätzlich kann man dann auch jedes beliebige andere Zeichen erlauben...
Uses
Clipbrd; Const KEY_STRGV = #$16; KEY_BACK = #8; KEY_STRGC = #3; KEY_STRGX = #$18; procedure TForm2.Edit1KeyPress(Sender: TObject; var Key: Char); Var LBuffer: Array[0..100] Of Char; Function IsValid(Const AStr: String): Boolean; var i: Integer; begin Result := TRUE; for i := 1 to Length(AStr) do begin if Not CharInSet(AStr[i], ['0'..'9']) then begin Result := FALSE; Break; end; end; end; begin if Not CharInSet(Key, [#3,#8, #$16, #$18,'0'..'9']) then Key := #0; if Key = KEY_STRGV then begin If Not IsValid(Clipboard.AsText) Then Key := #0; end; end; Grundsäztlich kann man hier natürlich einfach ein TMaskEdit verwenden allerdings finde ich die Eingabe dort ziemlich unzumutbar. Persönlich bevorzuge ich es, den Benutzer eingeben zu lassen was er möchte, wenn der das Feld dann verlässt (oder den Dialog schließt) wird er darauf hingewiesen das es ein Eingabeproblem gibt. Das ist einfach umzusetzen und bringt auch im späteren Verlauf die wenigsten Probleme... |
AW: TEdit NumbersOnly, Meldung nicht anzeigen
Zitat:
|
AW: TEdit NumbersOnly, Meldung nicht anzeigen
Finde ich auch. Entweder lasse ich alles so drin wie es das Betriebssystem vorgibt, oder ich fummele gar nicht dazwischen und blende nur einen Indikator ein dass die momentane Eingabe entweder gültig oder nicht gültig ist. Bei einem Input-Popup wird dann entweder sogar das Ok ausgegraut oder wenn man draufpatscht wird der Edit rot eingefärbt. Das klappt ohne jegliche geschriebene Sprache.
|
AW: TEdit NumbersOnly, Meldung nicht anzeigen
Oder so:
Delphi-Quellcode:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin if not (CharInSet(Key,['0'..'9',#8,#9])) then Abort; end; |
AW: TEdit NumbersOnly, Meldung nicht anzeigen
Die Fehlermeldung ... nja, es kommt drauf an.
Entweder man implementiert es im Edit richtig, also nicht nur KeyDown, sondern ALLE wege, wo der Text rein geht. Oder man mu es unbedingt auch nochmal beim Auslesen validieren. Und wenn man die Eingabe direkt prüft, dann kommt es auch auf's "Wie" an. Beim Eingeben selber darf niemals ein Fenster aufgehen, nur Hints oder z.B. die Edit-Farbe. Und dann beim Verlassen/Auslesen mit Fehlermeldung/Exception prüfen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz