Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem bei Fehlerverarbeitung (https://www.delphipraxis.net/128119-problem-bei-fehlerverarbeitung.html)

DonnieDarko_02 24. Jan 2009 14:29


Problem bei Fehlerverarbeitung
 
ich hab ein Editfeld, in das ein integer wert geschrieben werden soll, wird nun z.b. ein string eingegeben wird über showmessage fehlermeldung ausgegeben

Delphi-Quellcode:
procedure TForm1.Edit4KeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then
begin
       bevel4.Hide;
try   aanzahl:=strtoint(edit4.Text)
except
begin showmessage('Das ist kein gültiger Wert');exit; end;
edit4.Hide;
radiogroup1.Show;
radiogroup1.setfocus;

aber wie kann ich, nachdem die message angezeigt wird, wieder an den anfang der prozedur zurückkehren, dass ein neuer wert eingegeben werden kann?

khh 24. Jan 2009 14:46

Re: Problem bei Fehlerverarbeitung
 
Zitat:

Zitat von DonnieDarko_02
aber wie kann ich, nachdem die message angezeigt wird, wieder an den anfang der prozedur zurückkehren, dass ein neuer wert eingegeben werden kann?

du darfst das nicht mit der proceduralen Programmierung verwechseln.

deine Proc.
procedure TForm1.Edit4KeyPress(Sender: TObject; var Key: Char);

wird jedesmal beim keypress von neuem aufgerufen.


Gruss KH

haentschman 24. Jan 2009 16:49

Re: Problem bei Fehlerverarbeitung
 
Hallo...

versuchs mal damit:
Delphi-Quellcode:
procedure TForm1.Edit4KeyPress(Sender: TObject; var Key: Char);
var AllesOK: Boolean;
begin
 AllesOK:= True;
 if key=#13 then
   begin
     bevel4.Hide;
     try
       aanzahl:=strtoint(edit4.Text)
     except
       begin
         showmessage(Edit4.Text + ' ist kein gültiger Wert');
         Edit4.Text:= ''; // z.B. Feld löschen, oder du kannst an dieser Stelle alles markieren, wie du willst
         AllesOK:= False;
     end;
  if AllesOK then
    begin
      edit4.Hide;
      radiogroup1.Show;
      radiogroup1.setfocus;
    end;
  end;
end;
- Im Falle eines Fehlers wird AllesOK auf False gesetzt und Edit4 bleibt sichtbar.
:hi:

DeddyH 24. Jan 2009 16:52

Re: Problem bei Fehlerverarbeitung
 
Ohne den try-except-Block fände ich es besser. Stattdessen könnte man TryStrToInt oder Val benutzen. Exception-Handling ist ja eher für Fehler gedacht, die unerwartet auftreten können (abgebrochene Netzwerkverbindungen, Hardwarefehler oder sowas).

haentschman 24. Jan 2009 16:57

Re: Problem bei Fehlerverarbeitung
 
...bist aber heute wieder kleinlich... :P

DeddyH 24. Jan 2009 17:01

Re: Problem bei Fehlerverarbeitung
 
Ja nun, viele sehen try-except ja als Allheilmittel für alle möglichen Fehler an, das mag ich eben nicht ;)

haentschman 24. Jan 2009 17:03

Re: Problem bei Fehlerverarbeitung
 
...weiß ich doch 8) Ich wollte nur nicht zu viel Durcheinander anrichten...des Verständnisses wegen :P

[edit]
...noch besser wäre es, erst gar keine ungültigen Zeichen zuzulassen. In diesem Falle nur Zahlen zulassen. :thumb:
[/edit]

mkinzler 24. Jan 2009 17:04

Re: Problem bei Fehlerverarbeitung
 
Try...except/finally sollte nur für nicht vorhersehbare Fehler verwendet werden. Meist gibt es Besseres ( z.B. Try<Typ>To<Typ>() oder <Typ>To<Typ>Def() statt <Typ>To<Typ>() )


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:53 Uhr.

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