我做了一个小程序,在主窗口(Form1)之外,动态建立了一个新的窗口(Form2)。Form1窗口对应的单元文件是“Unit1”;Form2窗口对应的单元文件是“unit2”。
现在要动态删除新窗口(Form2),问题就来了。
一是在Form2中不好用“Free”命令删除自己;
二是如果在Form1窗口中用“Form2.Free”命令,则“Form2”窗口一建立,即被释放。
三是在“Form2”中用“close”命令,窗口是关闭了,但内存不被释放。
敬请高手指点指点迷津。
部分程序如下:
在Unit1中,implementation之后有:
uses Unit2;
var
Form2:TForm2; ......
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2:=TForm2.Create(Self);
Form2.Show;
???
Form2.Free;
end; 在Unit2中:
unit Unit2;interfaceuses ... , Unit1;type
TForm2 = class(TForm)
procedure Button11Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
......implementation{$R *.dfm}procedure TForm2.Button11Click(Sender: TObject);
begin
Close;
end;procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
???
end;end.
现在要动态删除新窗口(Form2),问题就来了。
一是在Form2中不好用“Free”命令删除自己;
二是如果在Form1窗口中用“Form2.Free”命令,则“Form2”窗口一建立,即被释放。
三是在“Form2”中用“close”命令,窗口是关闭了,但内存不被释放。
敬请高手指点指点迷津。
部分程序如下:
在Unit1中,implementation之后有:
uses Unit2;
var
Form2:TForm2; ......
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2:=TForm2.Create(Self);
Form2.Show;
???
Form2.Free;
end; 在Unit2中:
unit Unit2;interfaceuses ... , Unit1;type
TForm2 = class(TForm)
procedure Button11Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
......implementation{$R *.dfm}procedure TForm2.Button11Click(Sender: TObject);
begin
Close;
end;procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
???
end;end.
var
Form2:TForm2; ......
procedure TForm1.Button1Click(Sender: TObject);
begin
if Form2=nil then //LGG
Form2:=TForm2.Create(Self);
Form2.Show;
???
// Form2.Free; //LGG
end; 在Unit2中:
unit Unit2;interfaceuses ... , Unit1;type
TForm2 = class(TForm)
procedure Button11Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
......implementation{$R *.dfm}procedure TForm2.Button11Click(Sender: TObject);
begin
Close;
end;procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Form2=nil; // LGG
Action:= caFree; //LGG
???
end;end.
Form2=nil; // LGG
应为 Form2:= nil;
begin
Form2:=TForm2.Create(Self);
Form2.Showmodal; 这样
???
Form2.Free;
end;
Form2_boot:Boolean;Procedure Tform1.Button1Click(Sender:TObject);
begin
try
If Form_boot=False then
begin
Form2:=TForm2.Creat(Self);
Form2.Show;
Form2_boot:=True;
end
else
begin
Form2.Free;
Form2_boot:=False;
end;
except
end;
end;
查出一个
Creat应为Create这样你第一次点击按钮窗体创建,第二次点击释放.
OnCloseQuery发送自定义WM_FreeForm消息给MainForm
由MainForm负责Free那个Sender
ly_liuyang(Liu Yang)能说详细一点吗