Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Falscheingabe im EditLabel verhindern. (https://www.delphipraxis.net/187148-falscheingabe-im-editlabel-verhindern.html)

Pylickuz 1. Nov 2015 09:59

Falscheingabe im EditLabel verhindern.
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich weiß das dieses Thema schon oft hier im Forum besprochen wurde, aber ich habe noch immer das Problem mit der Eingabe von Buchstaben und weiß nicht wie man das verhindern kann.
Ich habe an meinem kleinen Rechner Projekt weiter gearbeitet und komme jetzt einfach nicht mehr weiter. Auch wenn ich die ganzen Einträge zu diesem Thema im Forum lese.
Es wäre schön wenn es mir (Anfänger) jemand erklären könnte, damit ich es in Zukunft besser weiß und mögliche zukünftige Probleme bei anderen die vor dem selben Problem stehen vermieden werden.


Ich bedanke mich schon im Vorraus für euer Verständniss und die Hilfe!

Uwe Raabe 1. Nov 2015 10:09

AW: Falscheingabe im EditLabel verhindern.
 
Du nennst keine Delphi-Version, daher nehme ich mal einfach die aktuelle Version an.

Sowohl
Delphi-Quellcode:
TEdit
als auch
Delphi-Quellcode:
TLabeledEdit
haben ein Property
Delphi-Quellcode:
NumbersOnly
, das auf
Delphi-Quellcode:
true
gesetzt die Eingabe von allem außer Ziffern verhindert.

Metschu 1. Nov 2015 10:20

AW: Falscheingabe im EditLabel verhindern.
 
Je Nach Delphi Version gibt es für das Edit-Feld die Eigenschaft "Numbers Only"

Oder im "OnKeyPress" Ereignis abfragen, welche Taste gedrückt wurde. Die Tasten bekommst du dann im ASCII Format raus -> ASCII Liste

In Alten Delphiversionen kannst du das mit "IF KEY =..." abfragen.
In Neuen Versionen benutze die Abfrage "IF NOT CHARINSET(Key,...)"

Lasse dann nur folgende "Keys" zu:
  • Zahlen (0-9)
  • die Löschtaste (#8)
  • sowie ein Punkt für Dezimal (#46)
  • Und Wenn du es Komfortabel machen möchtest, wandel die Eingabe eines Kommas (#44) in ein Punkt (#46) um...
Alle Anderen Tasten müssen dann in "Nichts" umgewandelt werden: "Key := #0"

Wenn du dann noch oben Rechts in der Suche "Edit Zahlen" eingibst, kommen noch mehr Infos dazu.

Aviator 1. Nov 2015 10:21

AW: Falscheingabe im EditLabel verhindern.
 
Edit: Der "Rote Kasten" hat gefehlt.

Zitat:

Zitat von Uwe Raabe (Beitrag 1320283)
Du nennst keine Delphi-Version, daher nehme ich mal einfach die aktuelle Version an.

Sowohl
Delphi-Quellcode:
TEdit
als auch
Delphi-Quellcode:
TLabeledEdit
haben ein Property
Delphi-Quellcode:
NumbersOnly
, das auf
Delphi-Quellcode:
true
gesetzt die Eingabe von allem außer Ziffern verhindert.

Ich gehe mal davon aus, dass er Delphi 7 verwendet. So sieht das auf dem Screenshot nämlich aus. Problem bei NumbersOnly ist, dass er keine Float-Werte in die Edit-Felder eintragen kann.

Besser wäre hier im KeyPress Event des TEdit die einzelnen Keys auszuwerten und nur die gewollten zuzulassen.
Delphi-Quellcode:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if not Key in ['0'..'9', '-', ',', #8] then
    Key := #0;
end;
Bei neueren Delphi Versionen gibt es noch die
Delphi-Quellcode:
CharInSet()
Funktion. Dann würde das so aussehen:

Delphi-Quellcode:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if not CharInSet(Key, ['0'..'9', '-', ',', #8]) then
    Key := #0;
end;
Die Funktion überprüft das angegebene Zeichen. Wenn dieses Zeichen nicht in der Auflistung (dem Set) enthalten ist, dann wird das Zeichen auf #0 gesetzt und somit nicht in das TEdit eingetragen. Hier könnte man auch noch einen Dialog oder einen Hint anzeigen (wie NumbersOnly das macht) um den User darauf aufmerksam zu machen, dass das eingegebene Zeichen nicht erlaubt ist.

Perlsau 1. Nov 2015 10:31

AW: Falscheingabe im EditLabel verhindern.
 
... oder man nimmt gleich ein TMaskEdit und bastelt sich eine entsprechende Editmaske vom Typ TEditMask:

MyMaskEdit.EditMask := '#000000000000;0'_;

p80286 1. Nov 2015 10:49

AW: Falscheingabe im EditLabel verhindern.
 
Oder man nutzt
Delphi-Quellcode:
tryStrtoFloat
.

Gruß
K-H

Pylickuz 1. Nov 2015 12:34

AW: Falscheingabe im EditLabel verhindern.
 
Danke für die vielen Antworten!

Ich bin aufjeden Fall weiter gekommen. :-D

frankyboy1974 1. Nov 2015 12:49

AW: Falscheingabe im EditLabel verhindern.
 
hallo,

oder man disabled das edit-feld:-D.

mfg

dummzeuch 1. Nov 2015 12:54

AW: Falscheingabe im EditLabel verhindern.
 
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

Dejan Vu 2. Nov 2015 06:47

AW: Falscheingabe im EditLabel verhindern.
 
Das nennt sich in anderen Frameworks 'Validator' und ist dann ein eigenes Control.

Allgemein gesehen hast Du mit deiner Kritik Recht, wobei ich bei einem Feld, das nur numerische Eingaben erlauben soll (und wo das eindeutig aus dem Kontext hervorgeht) auch nur die Zeichen erlaubt sein sollen, aus denen die Zahl besteht. Dabei kann man auch gleich Punkt und Komma auf das Dezimaltrennzeichen mappen. Auch auf "Fehl"eingaben ('+-+123', '123,') kann man dann reagieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:05 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz