如果未按保存按钮,怎样在关闭窗口时提醒用户是保存?不保存?取消?(85分)

  • 主题发起人 主题发起人 hxh81
  • 开始时间 开始时间
H

hxh81

Unregistered / Unconfirmed
GUEST, unregistred user!
用户修改了dbgrid中的内容,没有按保存按钮,在关闭窗体时提示用户是保存?不保存?
取消?怎样实现?
 
procedure TForm1.FormCloseQuery
 
判断DBGrid相连的Query或者Table的Modified。
在OnClose;或者OnCloseQuery里面判断,提示,如果取消,则设置参数为False,不允许关闭。
 
最好是在FormCloseQuery事件中。
 
yzhshi说得很正确。

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
Var
ResultBtn: Word;
begin
ResultBtn:= MessageDlg('退出前要保存吗?', mtConfirmation, [mbYes, mbNo, mbCancel], 0);
If ResultBtn = mrYes then begin
Action := caNone; // 取消关闭操作
// Save; // 保存一下
End else If ResultBtn = mrNo then begin
Action := caFree; // 不保存,直接退出
End else If ResultBtn = mrCancel then begin
Action := caNone; // 取消关闭操作
End Else Begin
ShowMessage('你刚才干了些什么?');
End;
end;
 
你可以使用一个文件改变标志来实现,比如说声明一个fModify:Boolean,当用户改变数据
的时候你就将它改变为fModify:=true;这样,在FormClose当中对它进行判断:
var
iUserResp : integer;

begin
if not fModify then
begin
iUserResp := MessageBox(Handle,'内容已改变,在退出前否要保存?','DBGRID Changed', MB_YESNOCANCEL + MB_ICONQUESTION + MB_DEFBUTTON1);
Case iUserResp of
IDYES: //用户选择了保存
begin
//执行保存
end;
IDNO://用户选择了不保存数据
begin
action:=cafree;
end;
IDCANCEL://用户选择了取消,意即不退出程序
begin
action:=caNone;
end;
end;
end //Case
else
action:=cafree;
end;//IF
 
还设一个全局的变量?不麻烦吗??
就像yzhshi的就可以了
 
同意yzhshi,判断table的状态
 
if table1.dsedit then
if MessageBox(Handle,'内容已改变,在退出前否要保存?','DBGRID Changed', MB_YESNOCANCEL + MB_ICONQUESTION + MB_DEFBUTTON1)=mryes then
save;
 
我想,在formclose 或 formquery中根据dbgrid.DataSource.DataSet.State值,
我们可以判断是否要提示保存/取消/退出。
 
同意风中流云
 

Similar threads

S
回复
0
查看
698
SUNSTONE的Delphi笔记
S
S
回复
0
查看
786
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部