最近写一个程序.
在窗体关闭时调用一个过程A.过程是对XML的写操作.里面有出错处理.
过程A代码一部分如下.
result := false;
try
(这里是对XML结点的操作)
代码行1
代码行2
代码行3
代码行4
result := true;
except
raise(TMyException.Create('TfrmReportDisplay_SetReportFormat_002','Set Set XML Error',0));
AXMLDoc.Active := false;
exit;
end;
TMyException 是我自己定义的一个出错处理类.假设当执行到代码行3的时候程序出错(我这里一般为对象为空).就会执行出错处理.
但在窗体Close时调用过程A,出错时窗体无法关闭.自己想的的解决方法: 通过过程A的返回值关闭窗体(网上有朋友说有Message消息直接关闭窗体),试过了也无效.求如何在这种情况下如何正常关闭窗体.
在窗体关闭时调用一个过程A.过程是对XML的写操作.里面有出错处理.
过程A代码一部分如下.
result := false;
try
(这里是对XML结点的操作)
代码行1
代码行2
代码行3
代码行4
result := true;
except
raise(TMyException.Create('TfrmReportDisplay_SetReportFormat_002','Set Set XML Error',0));
AXMLDoc.Active := false;
exit;
end;
TMyException 是我自己定义的一个出错处理类.假设当执行到代码行3的时候程序出错(我这里一般为对象为空).就会执行出错处理.
但在窗体Close时调用过程A,出错时窗体无法关闭.自己想的的解决方法: 通过过程A的返回值关闭窗体(网上有朋友说有Message消息直接关闭窗体),试过了也无效.求如何在这种情况下如何正常关闭窗体.
PostQuitMessage退出
你们的意思是不是"我没有处理这个异常,一直抛出,从而导致调用的窗体无法关闭?"
它映射到
procedure WMClose(var Message: TWMClose); message WM_CLOSE;然后调用Close方法
procedure TCustomForm.WMClose(var Message: TWMClose);
begin
Close;
end;这是Close方法
procedure TCustomForm.Close;
var
CloseAction: TCloseAction;
begin
if fsModal in FFormState then
ModalResult := mrCancel
else
if CloseQuery then
begin
if FormStyle = fsMDIChild then
if biMinimize in BorderIcons then
CloseAction := caMinimize else
CloseAction := caNone
else
CloseAction := caHide;
DoClose(CloseAction);//这一句就是调用你的OnClose事件了
if CloseAction <> caNone then
if Application.MainForm = Self then Application.Terminate
else if CloseAction = caHide then Hide
else if CloseAction = caMinimize then WindowState := wsMinimized
else Release;
end;
end;你抛出了异常DoClose(CloseAction);后面就不会再执行了,因此Hide或Release不会被调用,导致窗体不能关闭。
今天早上的时候按照楼上的思路去看了一下,问题真的是这样.
哈哈``
现在看看TCustomForm.Close里的过程``还真是这样.结贴.