Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Überprüfen von Edit (https://www.delphipraxis.net/166503-ueberpruefen-von-edit.html)

MisterC 15. Feb 2012 18:20

Ü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.

DeddyH 15. Feb 2012 18:24

AW: Überprüfen von Edit
 
Prüf einfach mit Delphi-Referenz durchsuchenTryStrToInt. Wenn das fehlschlägt, steht keine verwertbare Zahl im Edit.

himitsu 15. Feb 2012 18:29

AW: Überprüfen von Edit
 
Oder eine Komponente nehmen, welche nur Nummern annimmt.

In neueren Delphiversionen Delphi-Referenz durchsuchenTEdit.NumbersOnly, für ältere verstecken sich hier und da (in der DP) Codes/Beschreibungen, um dieses zu erreichen.
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;
.

MisterC 15. Feb 2012 18:43

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

himitsu 15. Feb 2012 18:58

AW: Überprüfen von Edit
 
Bis auf das NumbersOnly sollte alles Genannte bei dir funktionieren.

Ansonsten:
Hier im Forum suchenEdit nur Zahlen
Bei Google suchenDelphi Edit nur Zahlen eingeben
...

MisterC 15. Feb 2012 19:08

AW: Überprüfen von Edit
 
Welches würdest du mir den empfehlen.

MisterC 15. Feb 2012 19:18

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

verwirrt 15. Feb 2012 19:27

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:
...
if (Key in [#8, '0'..'9']) then
  else
    begin
      begin
        Key:= #0;
      end;
  end;
...
Wobei man immer noch über die Zwischenablage Buchstaben ins Edit bekommt...

silver-moon-2000 16. Feb 2012 00:20

AW: Überprüfen von Edit
 
Zitat:

Zitat von MisterC (Beitrag 1151270)
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

Wenn Du die Idee schon hast... :roll: aber dann will ich mal nicht so sein :stupid:

[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;
*“in” is dead, long live “CharInSet” (or maybe not)

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:
StrToInt(edPort.Text)
den Edit-Inhalt in eine Zahl umwandeln will.

Von daher ist der geheimnisumwitterte Vorschlag schon richtig, eine (zusätzliche) Überprüfung in das OnExit Event des Edits zu schreiben:

Delphi-Quellcode:
procedure frmMain.edPortExit(Sender: TObject);
var temp : Integer;
begin
  if not TryStrToInt(edPort.Text, temp) then
    (sender as TEdit).setFocus;
end;
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.
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...

UliBru 16. Feb 2012 07:55

AW: Überprüfen von Edit
 
Zitat:

Zitat von silver-moon-2000 (Beitrag 1151307)
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.
Mit anderen Worten, solange kein "gültiger" Inhalt im edit-feld steht, kann dasselbe nicht verlassen werden.

Was denn dazu führt, dass man dann zwangsweise etwas eingeben MUSS, ansonsten reagiert das Programm auch nicht mehr auf Buttons etc.
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 09:27 Uhr.
Seite 1 von 2  1 2      

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