![]() |
Fehler abfangen aber wie ?
:?:
Question Hi, habe da ein kleines Problem. Bin neuling bei Delphi und möchte mein erstes Programm schreiben aber es klappt nicht so wie ich es möchte. Ich habe 4 Editfelder wo der Benutzer aber nur zwei Ausfüllen braucht und die restlichen zwei werden berechnet. Die Auswahl welche zwei Ausgefüllt werden sollen ist dem Benutzer überlassen. Wenn ich nun das Programm starte und Ein Editfeld leer lasse stürzt das Programm ab. Könnte mir jemand bitte sagen wie ich solche fehler allgemein abfange, eine genau beschreibung würde mir sehr weiterhelfen. :?: |
Re: Fehler abfangen aber wie ?
Delphi-Quellcode:
Als Ursache für den konkreten Fehler vermute ich ein StrToInt oder was ähnliches, dem ein leerer String (z.B. Edit2.Text='', da noch nichts eingetragen wurde) übergeben wurde.
try
// Der Code, bei dem es krachen könnte except // Das, was bei einer Exception passieren soll end; Edit: Tippfehler korrigiert. |
Re: Fehler abfangen aber wie ?
Hallo siehe das Beispiel von BKempf.
Damit hast Du das Grundgerüst. Nun kannst Du entweder alle Exceptions abfangen, wie bei BKempf geschieben,oder du behandelst unterschiedliche Exceptions mit unterschiedlichen Routinenen:
Delphi-Quellcode:
Im Zweifel setz' doch mal den Code hier rein.
try
try // Der Code, bei dem es krachen könnte except on EConvertError do //für Konvertierungsfehler begin // Bsp: aaaa ist kein Integer end; end; except //für alle anderen Exceptions begin // Das, was bei einer Exception passieren soll end; end; Viel Spass. Peter |
Re: Fehler abfangen aber wie ?
Habe es mit eurer erklärung versucht, aber trotzdem bekomme ich die Fehlermeldung. Hier ist mein derzeitiger quellcode, könnt ihr mir sagen woran es liegt.
Delphi-Quellcode:
[edit=Admin]Hallo und herzlich Willkommen in der Delphi-PRAXiS. :dp: Ich habe Deinen Quellcode in sog. Delphi-Tags gesetzt: [delphi]...[/delphi]. Bitte künftig aufgrund der Übersichtlichkiet selber machen. Danke. ;-) Mfg, Daniel[/edit]
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ActnList; type TForm1 = class(TForm) LOHM: TLabel; EOHM1: TEdit; Label2: TLabel; EWATT1: TEdit; EVOLT1: TEdit; START1: TButton; EAMPER1: TEdit; LSTROM1: TLabel; LSPANNUNG1: TLabel; procedure START1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.START1Click(Sender: TObject); Var AOHM1,AWATT1,U1,I1,ohmges,wattges,uges,iges:real; Var Watttest1,Ohmtest1,Utest1,Itest1:real; begin try AOHM1:=strtofloat(EOHM1.Text); except on EConvertError do begin AOHM1:=0; end; end; try AWATT1:=strtofloat(EWATT1.Text); except on EConvertError do begin AWATT1:=0; end; end; try U1:=strtofloat(EVOLT1.Text); except on EConvertError do begin U1:=0 end; end; try I1:=strtofloat(EAMPER1.Text); except on EConvertError do begin I1:=0; end; end; //Eingabe //Prüfen If AOHM1<>0 then IF AWATT1<>0 then uges:=sqrt(AOHM1*AWATT1); iges:=sqrt(AOHM1/AWATT1); IF U1<>0 then wattges:=(U1*U1)/AOHM1; iges:=sqrt(AOHM1/AWATT1); IF I1<>0 then wattges:=(I1*I1)*AOHM1; uges:=sqrt(AOHM1*AWATT1); //Ausgabe EVOLT1.Text:=floattostr(uges); EAMPER1.Text:=floattostr(iges); end; end. |
Re: Fehler abfangen aber wie ?
Vergleiche jenes mit deiner Routine
Delphi-Quellcode:
cu
procedure TForm1.START1Click(Sender: TObject);
var AOHM1,AWATT1,U1,I1,ohmges,wattges,uges,iges:Extended; Watttest1,Ohmtest1,Utest1,Itest1:Extended; begin AOHM1:=StrToFloatDef(EOHM1.Text,0); //falls Fehler stellt StrtoFloatDef automatisch das Ergebnis 0 AWATT1:=StrToFloatDef(EWATT1.Text,0); U1:=StrToFloatDef(EVOLT1.Text,0); I1:=StrToFloatDef(EAMPER1,0); if AOHM1<>0 then begin if AWATT1<>0 then begin uges:=sqrt(AOHM1*AWATT1); iges:=sqrt(AOHM1/AWATT1); end; if U1<>0 then begin wattges:=(U1*U1)/AOHM1; iges:=sqrt(AOHM1/AWATT1); end; if I1<>0 then begin wattges:=(I1*I1)*AOHM1; uges:=sqrt(AOHM1*AWATT1); end; end; //Ausgabe EVOLT1.Text:=floattostr(uges); EAMPER1.Text:=floattostr(iges); end; Peter |
Re: Fehler abfangen aber wie ?
Tausend Dank für die hilfe, hat super funktioniert. Werde mir mal strtofloatdef genauer anschauen. Aber warum hat es nicht mit try und except funktioniert?
|
Re: Fehler abfangen aber wie ?
Prüfe doch mal deine if...then routinen.
Da fehlen z.B. einige begin und
Delphi-Quellcode:
.
end
Noch so ein Tip. Achte auf die Syntax und die Einrückungen. Ansonsten wird's doch sehr unübersichtlich. mfg Peter |
Re: Fehler abfangen aber wie ?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:30 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