問題摘要:當發生未處理的異常時,分配給Application.OnException
的方法從不運行。爲什麼Application.OnException永遠不會運行?
我創建一個空白的項目,只有本機和放在Unit.dfm
一個按鈕(這是基於一個official example):
// Unit1.pas
// *********
type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure AppException(Sender: TObject; E: Exception);
procedure Button1Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnException := AppException;
end;
procedure TForm1.AppException(Sender: TObject; E: Exception);
begin
Application.Terminate;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
raise Exception.Create('Incorrect password entered');
end;
然後我設置一個斷點內TForm1.AppException()
。我運行該程序,單擊按鈕,會顯示一個錯誤對話框,提示「密碼輸入錯誤」,但如果繼續執行,斷點不會中斷;該程序不像Terminate
,我也問過它。程序繼續運行,我可以再次按下按鈕。
我在Delphi 7中嘗試了相同的代碼(改編),但遇到相同的結果。
這裏工作得很好 –
@DavidHeffernan謝謝你試試這個代碼。我有什麼想法可以調試爲什麼它不會發生在我身上? – DBedrenko
您的FormCreate事件處理程序是否與表單的OnCreate事件斷開連接?請參閱對象檢查器或表單的.dfm。 –