0

我试图为我的按钮引发异常,我的表单上有 2 个按钮按钮一个开始测试,按钮 2 显示测试结果,当我单击按钮 2 显示结果而不开始测试时,出现异常消息但是我不希望它显示中断取消或继续选项我只是希望它显示错误消息,我一直在尝试为我的按钮引发异常,但似乎我失败了

这是我要引发异常的按钮

procedure TForm1.Button3Click(Sender: TObject);
begin
    form3.Show;

end;
4

2 回答 2

3

我不会引发异常,我只会显示一条错误消息。第二个按钮的点击处理程序的第一行应该是

if not FTestHasBeenRun then
begin
  MessageBox(Handle, 'No test has been run.', PChar(Caption), MB_ICONERROR);
  Exit;
end;

// Display test results here.

不用说,FTestHasBeenRun是一个具有默认值的变量,一旦测试完成就false设置为。true

显示更温和的信息性消息甚至可能是有意义的,而不是:

MessageBox(Handle, 'No test has been run.', PChar(Caption), MB_ICONINFORMATION);

此外,在运行测试之前,我会禁用第二个按钮。

如果您更喜欢异常,可以通过编写手动引发异常

raise Exception.Create('No test has been run.');

然后你可能会弹出 Delphi 调试器。但!只有当您从 Delphi IDE 中运行应用程序时才会发生这种情况。如果您通过在 Windows 资源管理器中双击 EXE 来启动程序,您将收到一个普通的错误消息框。如果您想以用户友好的方式呈现消息(而不是谈论“异常”等),您可以编写自己的异常处理代码。

但是,从您的评论看来,您不想手动引发异常(或显示错误消息)。你想压制一个正在其他地方提出的人。解决方案是像我的第一个代码片段一样,或者禁用第二个按钮,直到运行测试。这样,在有任何数据要分析之前,用户将无法给出“分析数据”命令。

于 2013-05-15T17:26:01.143 回答
3

我不希望它显示中断取消或继续选项

这不是您在代码中更改的内容。您需要更改调试器选项以使更改生效。

您可以通过取消选中调试器选项对话框的语言异常页面上的通知语言异常选项来阻止所有异常引发中断/继续对话框。

或者如果你想变得更可爱一点,你可以选择忽略某些类别的异常。同样,从调试器选项对话框的Language Exceptions页面中,将您的异常类添加到列表中。或者,在中断/继续对话框中,选中忽略此异常类型并按继续。当您要求忽略异常类型时,您将不再看到该异常类或其子类的中断/继续对话框。


我正在尝试为我的按钮引发异常

好吧,不在您显示的代码中。如果您想引发异常,那么您可以简单地这样做:

raise SomeExceptionClass.Create(...);

或者,如果您想显示一个消息框,请执行此操作。


我怀疑您正在尝试显示此代码

form3.Show;

当它要引发异常时停止运行。有几种方法可以做到这一点:

  1. form3.Show如果您知道它会引发异常,请禁用背后调用的按钮。
  2. form3.Show如果您知道它会引发异常,请不要调用。
  3. Letform3.Show被调用,但检测错误情况,显示错误对话框,然后调用Abort. 您必须在表单实际显示之前运行的代码中执行此操作,因此也许您可以向表单添加一个方法,该方法Show仅在表单处于显示状态时才会调用。这将允许您将决策移近了解决策背后原因的代码。

最后,您的变量、类型和方法都可以命名。您必须开始这样做,因为尝试使用编号而不是命名的实体进行编程是没有希望的。此外,您应该停止使用包含对 IDE 为您提供的表单的引用的全局变量。我希望 IDE 停止这样做,因为这是一种糟糕的做法。在需要时创建实例,不要在不合适的地方使用全局变量。

于 2013-05-15T17:42:29.050 回答