【发布时间】:2015-06-19 07:03:36
【问题描述】:
问题总结:分配给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 感谢您尝试代码。有什么想法可以调试为什么它没有发生在我身上吗?
-
您的 FormCreate 事件处理程序是否与表单的 OnCreate 事件断开连接?请参阅对象检查器或表单的 .dfm。
-
不知道。我会把
Caption := 'Boo';放在AppException中。也许代码运行但调试被破坏。但也许 FormCreate 没有运行。 -
@DavidHeffernan 我把
Button1.Caption := 'Boo';放在那里,但遗憾的是按钮标题没有改变。
标签: delphi exception-handling delphi-xe2 delphi-7