第十二章 非常处理与程序调试(二)[Delphi编程]
本文“第十二章 非常处理与程序调试(二)[Delphi编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
12.3 非常呼应
非常呼应为开辟者供应了一个按自己的需求举行非常处理的机制.try …except …end形成了一个非常呼应保护块.与finally差别的是:正常情形下except 背面的语句并不被履行,而当非常发生时程序自动跳到except,进入非常呼应处理模块.当非常被呼应后非常类自动排除.
下面的例子表示了文件翻开、删除历程中发生非常时的处理情形:
uses Dialogs;
var
F: Textfile;
begin
OpenDialog1.Title := 'Delete File';
if OpenDialog1.Execute then
begin
AssignFile(F, OpenDialog1.FileName);
try
Reset(F);
if MessageDlg('Erase ' +OpenDialog1.FileName + '?',
mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
System.CloseFile(F);
Erase(F);
end;
except
on EInOutError do
MessageDlg('File I/O error.', mtError, [mbOk], 0);
on EAccessDenied do
MessageDlg('File access denied.', mtError, [mbOk], 0);
end;
end;
end.
保存字
on…do用于判断非常范例.必须注意的是:except背面的语句必须包含在某一个on…do模块中,而不能单独存在.这又是同finally差别的一个地方.12.3.1 利用非常实例
上面所利用的非常呼应办法可总结为以下的情势:
on ExceptionType do
{呼应某一类的非常}
这种办法唯一利用的信息是非常的范例.普通情形下这已能满意我们的需求.但我们却无法获得非常实例中包含的信息,比方非常消息、错误代码等.假定我们需求对它们举行处理,那么就必须利用非常实例.
为了利用非常实例,需求为特定呼应模块供应一个暂时变量来保存它:
on EInstance : ExceptionType do …
在当前呼应模块中我们可以象利用一个普通对象那样来引用它的数据成员.但在当前呼应模块之外不被承认.
下面的代码用于获得非常消息并按自己的方法显示它:
{窗口中包含一个
ScrollBar部件,一个Button部件}procedure TErrorForm.Button1Click(Sender: TObject);
begin
try
ScrollBar1.Max := ScrollBar1.Min-1;
except
on E: EInvalidOperation do
MessageDlg('Ignoring Exception:'+E.Message,
mtInformation,[mbOK],0);
end;
end;
12.3.2 供应缺省呼应
在非常呼应模块中,普通我们只对但愿呼应的特定非常举行处理.假如一个非常发生而呼应模块并没有包含对它的处理代码,则退出当前呼应模块,非常类仍被保存.
为了保证任何非常发生后都能在当前呼应模块中被排除,可以定义缺省呼应:
try
{程序正常功效}
except
on ESomething do
{呼应特定非常}
else
{供应缺省呼应}
end;
由于else可以呼应任何非常,包含我们一无所知的非常,因此在缺省呼应中最好只包含诸如显示一个消息框之类的处理,而不要改变程序的运行状况或数据.
以上是“第十二章 非常处理与程序调试(二)[Delphi编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |