Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Eingabe auf Richtigkeit Prüfen mit try..except..??? (https://www.delphipraxis.net/48112-eingabe-auf-richtigkeit-pruefen-mit-try-except.html)

Osse 20. Jun 2005 23:05


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:
procedure TfrmFahrzeugEingabe.CheckZiffern(var key : Char);
begin
  if not (key in ['0' .. '9', ',' ,#8,#9]) then
    key := #0;
end;
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: .

Delphi-Quellcode:
  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;
Das ist ja irgendwie doof. Gefällt mir nicht so.

Habs jetzt mit if versucht, aber leider häng ich da an den Vergleichsbedingungen.

Delphi-Quellcode:
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;
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"

Weiß da jemand was??

ibp 20. Jun 2005 23:25

Re: Eingabe auf Richtigkeit Prüfen mit try..except..???
 
trystrtoint ist dein Freund!

alzaimar 21. Jun 2005 07:04

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:
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;
Der gleiche Code mit If...Then
Delphi-Quellcode:
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;
Version (1) ist eindeutig die Lesbarere, finde ich jedenfalls.

barf00s 21. Jun 2005 07:50

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>

TeronG 21. Jun 2005 07:55

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