打开A子窗体,再打开b子窗体的时候A子窗体关闭,并且如果A子窗体没有保存提示要保存,应该如何实现?
解决方案 »
- delphi ado sql, 2个数据库 mdb,结构相同,复制表中的部分或全部数据
- 服务器端和客户端的远程连接?
- Tdatetimepicker控件的焦点控制(年、月、日)问题
- 用什么控件可以显示treeview和checklistbox相结合的效果?
- 散分......散分.......散分.....再散分(小小)
- 简单问题多送分!关于dbtext,在线等。
- 两次showmodel(在打开的窗体上再打开一个)后,再打开文件浏览器,会出现在第二个窗体之后,怎么办?
- 关于web service 的问题
- 如何实现在TreeView与DBGrid之间通过鼠标拖动实现数据交换
- Web数据库..........
- 如何获取 Microsoft Web Browser 控件里的网页内容?
- 求助,字符串问题,在线等
1。在子窗口关闭事件中,看是否已经保存,如果没有保存则提示保存
2。在该函数中检测是否有其它窗体,如果有则关闭
3。创建新窗体
//Unit1
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementationuses Unit2, Unit3;{$R *.dfm}procedure TForm1.Button2Click(Sender: TObject);
begin
if Assigned(FormA) then
FormA.Close;
if Assigned(FormA) then
Exit;
if not Assigned(FormB) then
FormB:=TFormB.Create(Application);
FormB.ShowModal;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
if not Assigned(FormA) then
FormA:=TFormA.Create(Application);
FormA.Show;
end;end.
//Unit2=FormA
unit Unit2;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TFormA = class(TForm)
Label1: TLabel;
Button1: TButton;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private public
IsSaved:Boolean;
end;var
FormA: TFormA;implementation{$R *.dfm}procedure TFormA.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if not IsSaved then
begin
Action:=caNone;
Application.MessageBox('未保存,请保存','提示',64);
end
else
begin
Action:=caFree;
FormA:=nil;
end;
end;procedure TFormA.Button1Click(Sender: TObject);
begin
IsSaved:=True;
end;procedure TFormA.FormCreate(Sender: TObject);
begin
IsSaved:=False;
end;end.
//Unit3=FormB
unit Unit3;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TFormB = class(TForm)
Label1: TLabel;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;var
FormB: TFormB;implementation{$R *.dfm}procedure TFormB.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caFree;
FormB:=nil;
end;end.
procedure Tfpdcl.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if "保存标志未保存" then
begin
showmessage('未保存,请保存');
canclose:=false;
end;
end;保证只打开一个窗体可以先执行关闭所有窗体过程,再打开某个窗体
procedure Tmain.N7Click(Sender: TObject);
var
i:integer;
begin
for i:=0 to main.MDIChildCount-1 do
try
main.MDIChildren[i].Close;
except
on EAccessviolation do ;
end;
end;
Form1.MDIChildren[I].Close;接着在打开B子窗体。
这样子应该可以,如果害怕有没有保存,我觉得你应该用一个全局变量来确认是否有做改动啦,最后再在关闭事件中判断。