有没有办法在不引发EAbort异常的情况下中止方法的执行?
这是一个问题:
....
try
i := strtoint(Edit1.Text);
if not (i=10) then
begin
showmessage('Value for I must be 10 !');
sysutils.abort;
end;
except
showmessage('Wrong Value for i !');
end;
showmessage('Execution continue ...');
...
Run Code Online (Sandbox Code Playgroud)
在这个示例中,如果i的值为5,程序执行将不会中止...它将显示消息"我必须为10的值!",然后消息"i的值错误!" (因为引发了EAbort异常)然后消息"Execution continue ...".我知道如何解决这种情况,但我需要没有EAbort异常的sysutils.abort的通用解决方案.
Joh*_*ica 10
退出当前方法如果退出过程,
请使用plain exit.
或者exit(return_code)如果退出函数(*).
请注意,exit不会在try-except块中捕获,但会在try-finally块中捕获.
如果你想要更细粒度的控制,你可以使用break和来打破循环continue.
最后有选择goto.这是最后的选择,通常被认为是代码气味.
样品:
function ExitBreakContinue(WhatToDo: integer): string;
var
a,b,i: integer;
label SomeLabel;
begin
a:= 0; b:= 0;
try
for i:= 0 to 10 do begin
a:= a + 1;
case WhatToDo of
1: exit('exit_called');
2: continue;
3: break;
4: abort;
5: goto SomeLabel;
end;
b:= b + 1;
end; {for i}
Result:= 'a,b = '+IntToStr(a)+','+IntToStr(b);
finally
Result:= Result + ' finally';
end;
SomeLabel: Result:= Result + ' goto ';
end;
Run Code Online (Sandbox Code Playgroud)
关闭应用程序
在您打电话的图形应用程序中application.terminate.
在halt带有退出代码或RunError错误代码的控制台应用程序调用中.
halt/ RunError也可以在图形应用程序中工作,但不建议这样做,因为它不允许应用程序正常关闭.
这会使您的用户感到不安,因为OnCloseQuery无法触发主窗体的事件.
通常,您(提供)将保存用户在此事件处理程序中的工作.
(*)exit(return_code)在Delphi 2009及更高版本中受支持.
| 归档时间: |
|
| 查看次数: |
1277 次 |
| 最近记录: |