![]() |
Edit Feld begrenzen mit bestimmten Werten
Hallo!
Ich habe ein EditFeld und möchte in diesem nur die Zahlen von 200 - 999 zulassen. Wie kann ich am Einfachstendas realisieren? (Es gegen ein Mask-Edit auszutauschen wäre zu aufwändig!) |
Re: Edit Feld begrenzen mit bestimmten Werten
du kannst in OnChange prüfen, ob die zahl im gewünschten bereich ist.
|
Re: Edit Feld begrenzen mit bestimmten Werten
Du könntest folgende Prozedure aufrufen, dann kanst du nur noch Ziffern eingeben.
Delphi-Quellcode:
Du setzt MaxLength von deinem Editcontrol auf 3.
procedure MakeNumericControl(theControl: TWinControl);
begin Assert(Assigned(theControl)); SetWindowLong(theControl.Handle, GWL_STYLE, GetWindowLong(theControl.Handle, GWL_STYLE) or ES_NUMBER); end; |
Re: Edit Feld begrenzen mit bestimmten Werten
Und sowieso im OnKeyPress erstmal nur Zahlen zulassen
Delphi-Quellcode:
Aber OnChange ist keine gute Idee, denn wenn der User anfängt einzugeben, wird er niemals sofort 200 eingeben, sondern eben erstmal eine 2. Die wäre zu klein, und damit nicht zulässig.
if not key in [0..9] Then key := #0;
Überprüfe also die Werte am besten im OnExit. //Edit: Jetzt hab ich den roten Kasten einfach ignoriert und nix dazugeschrieben :roll: Mein Post bezog sich natürlich auf RavenIVs Post. |
Re: Edit Feld begrenzen mit bestimmten Werten
Danke für eure Antworten. Im Prinzip muss ich beim OnExit ja
nur testen ob die erste Zahl ne 2 oder größer ist, gell? Thanx! |
Re: Edit Feld begrenzen mit bestimmten Werten
Ähm, nö. Ich würde einfach
Delphi-Quellcode:
schreiben, denn wenn du nur prüfst, ob die erste Zahl größer gleich 2 ist, läßt du auch ein- und zweistellige Zahlen zu.
if StroToInt(Edit1.text) in [200..999] Then
//bla else //Editwert auf gültigen Wert setzen oder Fehlermeldung und FOkus auf Edit //oder sonst irgendein Mist ;) //Edit: Nicht zu vergessen, was shmia gesagt hat: MaxLength auf 3 setzen! Dann kann man zumindest schonmal nix größeres reinschreiben. |
Re: Edit Feld begrenzen mit bestimmten Werten
:wall: klar da hast du recht!
|
Re: Edit Feld begrenzen mit bestimmten Werten
Wieder ein Problem:
Delphi-Quellcode:
Dabei bekomme ich eine Fehlermeldung (Konstantenausdruck verletzt untere Grenzen).
if StroToInt(Edit1.text) in [200..999] Then
Sind da Zahlen größer als 255 möglich? |
Re: Edit Feld begrenzen mit bestimmten Werten
:shock: Oh Gott, klar geht das nicht. Mengen erlauben natürlich nur Zahlen bis 255. :wall: Das passiert, wenn man ohne Nachzudenken postet :lol: OK, dann mußt dus halt weniger elegant über ne normale Bereichsprüfung lösen. ;)
|
Re: Edit Feld begrenzen mit bestimmten Werten
Hallo,
mein Favorit ist das Ereignis OnChange in Verbindung mit OnEnter, weil 1. eine Tastenüberprüfung das Kontextmenü sowie Strg+V und Umschalt+Insert nicht berücksichtigen kann, bzw letztendlich die Funktionalität unterbindet 2. das Setzen von ES_NUMBER das Einfügen von Text über die Zwischenablage nicht verhindert. So verhindere ich falsche Eingaben:
Delphi-Quellcode:
//...
sUndo : String; //... procedure TForm1.Edit1Change(Sender: TObject); var PosCur : Integer; s : string; i : Integer; const MAX = 999; MIN = 200; begin try s := Edit1.Text; if s = '' then exit; PosCur := Edit1.SelStart;//falls Fehler, merken i := StrToInt(s);//Wenn Fehler dann >> except //Wenn if (s[1] = '-') or (i > MAX) or ((Length(s) = 3) and (i < MIN)) then raise Exception.Create('');//Exception auslösen >> except sUndo := Edit1.Text; except showmessage('Nur Werte zwischen '+IntToStr(MIN)+' und '+IntToStr(MAX)+' erlaubt!'); Edit1.Text := sUndo;//Edit zurücksetzen if Length(s) > Length(sUndo) then PosCur := PosCur-1; end; Edit1.SelStart := PosCur;//Cursor an alte Position setzen end; procedure TForm1.Edit1Enter(Sender: TObject); begin sUndo := Edit1.Text;//wird in OnChange benötigt end; |
Re: Edit Feld begrenzen mit bestimmten Werten
Habs jetzt ganz einfach so gemacht:
Delphi-Quellcode:
Das EditFeld ist auf 3 Zeichen begrenzt und wird im
if (StrToInt(Edit16.Text)< 200) then
onchange auf 'nur Zahlen' überprüft. Funktioniert! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:21 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