AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Falscheingabe im EditLabel verhindern.
Thema durchsuchen
Ansicht
Themen-Optionen

Falscheingabe im EditLabel verhindern.

Ein Thema von Pylickuz · begonnen am 1. Nov 2015 · letzter Beitrag vom 2. Nov 2015
Antwort Antwort
Pylickuz

Registriert seit: 31. Okt 2015
11 Beiträge
 
#1

Falscheingabe im EditLabel verhindern.

  Alt 1. Nov 2015, 10:59
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!
Miniaturansicht angehängter Grafiken
delphiproblembuchstaben.png  
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#2

AW: Falscheingabe im EditLabel verhindern.

  Alt 1. Nov 2015, 11:09
Du nennst keine Delphi-Version, daher nehme ich mal einfach die aktuelle Version an.

Sowohl TEdit als auch TLabeledEdit haben ein Property NumbersOnly , das auf true gesetzt die Eingabe von allem außer Ziffern verhindert.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Metschu

Registriert seit: 31. Dez 2006
151 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

AW: Falscheingabe im EditLabel verhindern.

  Alt 1. Nov 2015, 11:20
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.
Torsten
Ich kam, sah und alles Funktionierte.
Dann klingelte mein Wecker...

Geändert von Metschu ( 1. Nov 2015 um 11:23 Uhr)
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Falscheingabe im EditLabel verhindern.

  Alt 1. Nov 2015, 11:21
Edit: Der "Rote Kasten" hat gefehlt.

Du nennst keine Delphi-Version, daher nehme ich mal einfach die aktuelle Version an.

Sowohl TEdit als auch TLabeledEdit haben ein Property NumbersOnly , das auf 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 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.
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#5

AW: Falscheingabe im EditLabel verhindern.

  Alt 1. Nov 2015, 11:31
... oder man nimmt gleich ein TMaskEdit und bastelt sich eine entsprechende Editmaske vom Typ TEditMask:

MyMaskEdit.EditMask := '#000000000000;0'_;
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Falscheingabe im EditLabel verhindern.

  Alt 1. Nov 2015, 11:49
Oder man nutzt tryStrtoFloat .

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Pylickuz

Registriert seit: 31. Okt 2015
11 Beiträge
 
#7

AW: Falscheingabe im EditLabel verhindern.

  Alt 1. Nov 2015, 13:34
Danke für die vielen Antworten!

Ich bin aufjeden Fall weiter gekommen.
  Mit Zitat antworten Zitat
Benutzerbild von frankyboy1974
frankyboy1974

Registriert seit: 7. Apr 2015
Ort: SH
169 Beiträge
 
Delphi XE7 Professional
 
#8

AW: Falscheingabe im EditLabel verhindern.

  Alt 1. Nov 2015, 13:49
hallo,

oder man disabled das edit-feld.

mfg
Java ist auch eine Insel.
Ist Delphi von Oracle?
In meiner Buchstabensuppen fehlt das C++!
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.623 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

AW: Falscheingabe im EditLabel verhindern.

  Alt 1. Nov 2015, 13:54
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
Thomas Mueller
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#10

AW: Falscheingabe im EditLabel verhindern.

  Alt 2. Nov 2015, 07:47
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.
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:49 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