![]() |
Überprüfen von Edit
Ich habe ma eine Frage.
Wie kann ich überprüfen ob in einem Tedit (Bei mir Heißst es Port), ob eine Zahl eingegeben wurde und wenn nicht das die nachricht Bitte Port eingeben ausgegeben wird. LG MisterC ps:Ich hätte die Idee es mit einer If Methode zu machen. |
AW: Überprüfen von Edit
Prüf einfach mit
![]() |
AW: Überprüfen von Edit
Oder eine Komponente nehmen, welche nur Nummern annimmt.
In neueren Delphiversionen ![]() Oder ein TMaskEdit, ein TEdit mit einem TUpDown, ein TSpinEdit uvm. zum TryStrToInt: Dieses ins OnExit (blos nicht in OnChange), dort dann die MessageBox anzeigen und danach vielleicht noch ein
Delphi-Quellcode:
.
(Sender as TComponent).SetFocus;
|
AW: Überprüfen von Edit
Ich nutze die dinge zum ersten mal.
Ich hab delphi7 PE könnt ihr mir vllt. die Methoden nennen die bei mir funktionieren. ps: könnt ihr vllt. noch in meinem Threath schauen |
AW: Überprüfen von Edit
Bis auf das NumbersOnly sollte alles Genannte bei dir funktionieren.
Ansonsten: ![]() ![]() ... |
AW: Überprüfen von Edit
Welches würdest du mir den empfehlen.
|
AW: Überprüfen von Edit
Ich kapiers einfach nicht kann ich nicht machen das nur zahlen eigeben kann anderes wir ignoriert bitte um erklärung mit Code.
Ich hätte dazu nur die idee OnKeyPress |
AW: Überprüfen von Edit
Wenn Fremdkomponenten in Frage kommen, wäre aus den Jedis JvValidateEdit mit DisplayFormat:= dfInteger was.
Das hätte den Vorteil, dass nur Zahlen eingegeben werden können und du dir das Prüfen sparen kannst. In einem älteren Programm hab ich das verwendet:
Delphi-Quellcode:
Wobei man immer noch über die Zwischenablage Buchstaben ins Edit bekommt...
...
if (Key in [#8, '0'..'9']) then else begin begin Key:= #0; end; end; ... |
AW: Überprüfen von Edit
Zitat:
[edit] Arrgh, wieso hab' ich die zweite Hälfte des Posts von verwirrt übersehen? Da steht ja schon alles drin...[/edit]
Delphi-Quellcode:
*
procedure frmMain.edPortKeyPress(Sender: TObject; var Key: Char);
begin if not CharInSet(Key, [#8, #48..#57]) then // if not (Key in [#8, #48..#57]) then //<-- auf älteren Systemen, in denen CharInSet noch nicht existiert * Key := #0; end; ![]() Dieser Code verhindert, dass beim Tastendrücken andere tasten als Backspace und die Ziffern 1..0 "verwendet werden können". Die Variable "key" enthält dabei den ASCII Code der Taste, die gedrückt wurde, und die eben an den Text, der schon im Edit-Feld steht, angehängt werden soll. Wir sagen jetzt einfach: Wenn dieser ASCII Code nicht der von BACKSPACE (damit wir Fehleingaben wieder löschen können) oder der der Ziffern 1..0 ist, dann soll der Tastencode eben #0 (oder "nichts") sein. Dieser Code alleine hat aber (mindestens) einen gravierenden Nachteil: Es ist immer noch möglich über Copy/Paste Buchstaben oder andere unerwünschte Zeichen in das Edit-Feld zu werfen. Und dann knallt es, wenn man über
Delphi-Quellcode:
den Edit-Inhalt in eine Zahl umwandeln will.
StrToInt(edPort.Text)
Von daher ist der geheimnisumwitterte Vorschlag schon richtig, eine (zusätzliche) Überprüfung in das OnExit Event des Edits zu schreiben:
Delphi-Quellcode:
Wenn also das edit-Feld verlassen wird (den Focus verlieren soll ???), dann wird geprüft, ob sich die Zahl ohne Probleme in einen Integer umwandeln lässt. Wenn das nicht der Fall ist, wenn also TryStrToInt False zurückgibt, wird der Focus wieder auf das EditFeld gesetzt.
procedure frmMain.edPortExit(Sender: TObject);
var temp : Integer; begin if not TryStrToInt(edPort.Text, temp) then (sender as TEdit).setFocus; end; Mit anderen Worten, solange kein "gültiger" Inhalt im edit-feld steht, kann dasselbe nicht verlassen werden. Die Überprüfung im OnExit ist von daher schön, weil man im weiteren Verlauf des Programms praktisch sicher sein kann, dass nur "gültige" Daten (also nur Zahlen) im Edit stehen. Unbedingt nötig ist keine der beiden Methoden, da man auch selbst im Code bei jeder Umwandlung über TryStrToInt oder StrToIntDef prüfen kann, aber etwas einfacher ist es schon P.S. @Geheimniskrämer: Sowas, edit.NumbersOnly kannte ich noch nicht, wieder was gelernt. Danke dafür! P.P.S. @MisterC: Sorry, aber das muss ich mal sagen: Ich habe Deinen Post dreimal lesen müssen, bis ich verstanden habe, was Du willst... |
AW: Überprüfen von Edit
Zitat:
Also dann vielleicht noch auf einen leeren String abfragen.
Delphi-Quellcode:
procedure frmMain.edPortExit(Sender: TObject);
var temp : Integer; begin if (edPort.Text <> '') and not TryStrToInt(edPort.Text, temp) then (sender as TEdit).setFocus; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:44 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