![]() |
Eingabe auf Richtigkeit Prüfen mit try..except..???
Moin, Moin
wollte eine Abfrage machen, ob der Benutzer einen richtigen Wert eingegeben hat. Die Max Stellenanzahl hab ich schon durch das Eingabefenster begrenzt. Nun soll es nur Möglich sein Werte zwischen 0 bis 255 einzugeben. Dabei sind logischerweise keine Buchstaben... zugelassen, sondern nur 0-9. Wollte mal Fragen, ob das irgendjemand mit try...except.. end macht. Hab bei euch immer nur die Lösungen mit Key press gesehen.
Delphi-Quellcode:
Wollte aber gerne am ende, wenn die Werte mit einem Button.click eingelesen werden, alle meiene Werte checken. Finde die Idee mit Key press nicht so doll, man kann sich ja schließlich mal vertippen :coder: .
procedure TfrmFahrzeugEingabe.CheckZiffern(var key : Char);
begin if not (key in ['0' .. '9', ',' ,#8,#9]) then key := #0; end;
Delphi-Quellcode:
Das ist ja irgendwie doof. Gefällt mir nicht so.
try
begin EditLow := StrToInt(SuchEdit[i,0].Text); EditHigh := StrToInt(SuchEdit[i,1].Text); end except begin Application.MessageBox('Bitte achten Sie darauf, dass Sie nur Zahlen eingeben',PChar('Eingabefehler'),0); SuchEdit[i,0].clear; SuchEdit[i,1].clear; end; end; Habs jetzt mit if versucht, aber leider häng ich da an den Vergleichsbedingungen.
Delphi-Quellcode:
Die If Abfrage mit mehreren Werten funktioniert nicht richtig. Mit einem Wert kann ich vergleichen, aber nicht mit ['0','1'] oder ['0'..'9'], da bekomm ich immer ne Compilermeldung "Inkompatible Typen"
var
i,n :Integer; wert : string; begin for i:=0 to 8 do begin setlength(Wert,3); Wert := SuchEdit[i,0].Text; for n := 0 to length(wert) do if wert[n] = ['0','1'] then EditLow := StrToInt(SuchEdit[i,0].Text); end; end; Weiß da jemand was?? |
Re: Eingabe auf Richtigkeit Prüfen mit try..except..???
trystrtoint ist dein Freund!
|
Re: Eingabe auf Richtigkeit Prüfen mit try..except..???
Gegen die Plausibilitätsabfrage per Try...Except ist an sich Nichts einzuwenden, das es die Lesbarkeit erhöht und nicht unnötig verschachtelte 'If ok then' vermeidet. Der Code, so wie er bei Richtigkeit der Eingabe ausgeführt würde, ist sequentiell dargestellt und die Fehlerbehandlung klar davon getrennt. Speziell bei mehreren Fehlerquellen ist das sehr praktisch.
Bei ein oder zwei Abfragen würde ich aber vielleicht, wie eben schon erwähnt, doch die 'TryStrTo****' Funktionen verwenden. Die hier immer wieder auftretenden Argumente von wesentlich langsamerer Ausführung mit Try...Except sind insofern Blödsinn, als es vollkommen Wurscht ist, ob der Anwender nach 0,15 oder 2,0 ms eine Fehlermeldung vorgesetzt bekommt. Code mit Try...Except:
Delphi-Quellcode:
Der gleiche Code mit If...Then
Begin
Try Zahl := StrToInt (Eingabe.Text); If Zahl < KleinsterWert Then Raise Exception.Create('Zahl ist zu klein'); If Zahl > KleinsterWert Then Raise Exception.Create('Zahl ist zu gross'); ... // Code, der normalerweise (Eingabe ist OK) ausgeführt wird. Except ... // Fehlerbehandlung End; End;
Delphi-Quellcode:
Version (1) ist eindeutig die Lesbarere, finde ich jedenfalls.
Begin
If TryStrToInt (Eingabe.Text, Zahl) Then If Zahl < KleinsterWert Then ... // Fehlerbehandlung Else If Zahl > KleinsterWert Then ... // Fehlerbehandlung Else Begin ... // Code, der normalerweise (Eingabe ist OK) ausgeführt wird. End Else ... // Fehlerbehandlung End; |
Re: Eingabe auf Richtigkeit Prüfen mit try..except..???
StrToInt(Def) bauen auf TryStrToInt auf ... wenn ihr mal mitnem Strg+Linksklick aufs StrToInt(Def) geht, seht ihrs ...
achja ^^ versuchs doch gleich mit StrToIntDef... schlägt dieses nämlich intern fehl, wird der default wert genommen .... </senf> |
Re: Eingabe auf Richtigkeit Prüfen mit try..except..???
Frage am Rande: Warum nicht gleich ein SpinEdit benutzen ??
Maxwert auf 255 und fertig! DA man da ja eh nur Zahlen eintippen kann erübrigt sich auch die Umwandlung ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:18 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