单击我的按钮时发出异常

时间:2013-05-15 17:23:07

标签: delphi

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

这是我要引发异常的按钮

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

end;

2 个答案:

答案 0 :(得分: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来启动程序,则会出现一个普通的错误消息框。如果您想以用户友好的方式呈现消息(而不是讨论“例外”等),您可以编写自己的异常处理代码。

但是,根据您的评论,您似乎想要手动引发异常(或显示错误消息)。你想要压制一个正在其他地方被引发的东西。解决方案是在我的第一个代码片段中执行,或者在运行测试之前禁用第二个按钮。这样,在有任何数据需要分析之前,用户将无法提供“分析数据”命令。

答案 1 :(得分:3)

  

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

这不是你在代码中改变的东西。您需要更改调试器选项以实现更改。

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

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


  

我试图为我的按钮引发异常

好吧,不在您展示的代码中。如果您想提出异常,那么您可以这样做:

raise SomeExceptionClass.Create(...);

或者,如果要显示消息框,请执行此操作。


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

form3.Show;

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

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

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