我在Delphi XE中創建了一個try/except/finally語句,當應用程序生成異常時,except塊永遠不會被稱爲直接跳轉到finally塊,我嘗試了一些東西,如反轉try/except/finally以嘗試/ finally/except,嘗試將try塊更改爲不同的地方,清理代碼並重新編譯以防萬一是Delphi問題,但注意到似乎工作正常。嘗試/除外/最後在Delphi中不能正常工作XE
我在這裏試圖完成的是向用戶顯示一個對話框消息,並在發生崩潰時清理代碼。
procedure CallbackExport(Sender: TObject);
var
SaveDlg: TSaveDialog;
FileName: string;
begin
SaveDlg := TSaveDialog.Create (nil);
try
try
SaveDlg.Title := 'Export';
SaveDlg.InitialDir := GetSystemPath(CSIDL_DESKTOP);
SaveDlg.Options := [ofOverwritePrompt, ofEnableSizing];
case (Sender as TMenuItem).Tag of
cnExcel: begin
SaveDlg.Filter := 'Excel File (*.xls)|*.xls';
end;
cnHtml: begin
SaveDlg.Filter := 'HTML File (*.html)|*.html';
end;
cnTxt: begin
SaveDlg.Filter := 'Text File (*.txt)|*.txt';
end;
cnCsv: begin
SaveDlg.Filter := 'Comma Seperated File (*.csv)';
end;
cnXml: begin
SaveDlg.Filter := 'XML file (*.xml)|*.xml';
end;
end;
if not SaveDlg.Execute(self.Handle) then
Exit;
FileName := SaveDlg.FileName;
case (Sender as TMenuItem).Tag of
cnExcel: begin
ExportGridToExcel(FileName, tvdGrid);
end;
cnHtml: begin
ExportGridToHTML(FileName, tvdGrid);
end;
cnTxt: begin
ExportGridToText(FileName, tvdGrid);
end;
cnCsv: begin
ExportGridToText(FileName, tvdGrid, true, true, ',', '', '', 'CSV');
end;
cnXml: begin
ExportGridToXML(FileName, tvdGrid);
end;
end;
except
on e: exception do
begin
ShowMessage('An error occurred while saving the file ' + FileName + #13#10 + 'With a message: ' + E.Message);
StvdAudit.tvdAudit('Error saving file, reason: ' + E.Message);
end;
end;
finally
SaveDlg.Free;
end;
end
這段代碼看起來像它應該工作。你能提供一個我們可以實際編譯和測試的可重複的例子嗎? –
您如何知道正在生成異常?嘗試明確地引發異常,看看會發生什麼。放「引發異常。create('這是個例外');」在第二次TRY之後。 –
我同意。正如所示,這段代碼很少會引發異常。 –