这是菜单中的退出代码:
procedure TForm1.Q1Click(Sender: TObject);
var flag : integer;
begin
if richedit1.Modified=True then
begin
flag:=application.messagebox('文件还没有保存, 要保存吗?', '迷你本本2005', mb_yesnocancel);
if flag=idyes then
begin
if SaveDialog1.FileName='' then
A1Click(Sender)
else
RichEdit1.Lines.SaveToFile(SaveDialog1.filename);
close;
end
else if flag=idno then
form1.Close;
end
else
form1.close;end;我在主窗体的OnClose事件中调用这个代码:Q1Click(Sender);
为何这样会出错?
当把OnClose事件去掉后,一切正常。
请问该怎样修改,才可使两个调用都正常?
procedure TForm1.Q1Click(Sender: TObject);
var flag : integer;
begin
if richedit1.Modified=True then
begin
flag:=application.messagebox('文件还没有保存, 要保存吗?', '迷你本本2005', mb_yesnocancel);
if flag=idyes then
begin
if SaveDialog1.FileName='' then
A1Click(Sender)
else
RichEdit1.Lines.SaveToFile(SaveDialog1.filename);
close;
end
else if flag=idno then
form1.Close;
end
else
form1.close;end;我在主窗体的OnClose事件中调用这个代码:Q1Click(Sender);
为何这样会出错?
当把OnClose事件去掉后,一切正常。
请问该怎样修改,才可使两个调用都正常?
if SaveDialog1.FileName='' then
A1Click(Sender)这样试试:procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
flag : integer;
begin
CanClose:=False;
if richedit1.Modified=True then
begin
flag:=application.messagebox('文件还没有保存, 要保存吗?', '迷你本本2005', mb_yesnocancel);
if flag=idyes then
begin
try
if SaveDialog1.FileName='' then
SaveDialog1.Execute;
RichEdit1.Lines.SaveToFile(SaveDialog1.filename);
CanClose:=true;
except end;
end
else if flag=idno then
CanClose:=True;
end
else
CanClose:=True;
end;
正如楼上兄弟的方法,在这种情况下建议不要用ONCLOSE时间来触发,用ONCloseQuery可能好一些,同时避免在ONCloseQuery事件中不要在触发ONCloseQuery事件