关于动态产生form的问题!(100分)

  • 主题发起人 主题发起人 xyusun
  • 开始时间 开始时间
X

xyusun

Unregistered / Unconfirmed
GUEST, unregistred user!
问题如下:
在一个动态产生的form1的确定按钮的事件中,会动态产生form2:
要求在按了form2的取消按钮时,并且,将form1释放掉!
请问如何实现!
 
FORM1:

if not Assigned(Form2) then
begin
Form2:=TForm2.Create(Application);
Form2.ShowModal;
Form2.Free;
Form2:=Nil;
end;

FORM2:

Form2.Close;
Form1.Close;
 
补充ONForm1Close事件中
begin
Form1 := nil;
Action := caFree;
end;
from2也一样
 
var
Form2:TFrom2;
......

begin
form2:=TForm2.create(application);
form2.show;
form2.update;
end;

在Form2.close中,
action:=caFree;
 
unit Form1
...
procedure TForm1.Button1Click(Sender: TObject);
var R: TModalResult;
begin
with TForm2.Create(Self) do
try
R := ShowModal;
finally
Free;
end;
if R = mrCancel then Free;
end;
--------------------------------
Unit Form2
...
procedure TForm2.CancelButtonClick(Sender: TObject);
begin
ModalResult := mrCancel;
end;
 
补充说明如下:
在主form的一个按钮按下的事件中,实现如下功能:
语句如下:

procedure TForm1.Button1Click(Sender: TObject);
var i,j,k,ti,tj,tk,yti,ytj,ytk,ltk:integer;
tdwparent,ydwparent,ldwparent:string;
m:char;
tem:Tform1;
begin

modalresult:=mrnone;
if label1.Caption='t' then //团
m:='t';
if label1.Caption='y' then //营
m:='y';
if label1.Caption='l' then //连
m:='l';
if label1.Caption='p' then //排
m:='p';
case m of
't': //团
begin
jisuanrenshu('t',form1);
ti:= strtoint(form1.edit3.text); //团下营的个数
tj:=strtoint(form1.edit4.text); //团下直属连的个数

tk:=strtoint(form1.edit5.text); //团下直属排的个数
tdwparent:=form1.label16.Caption;
for i:=1 to ti do
begin
tem:=Tform1.Create(self);
if tem.ShowModal<>mrok then
begin

tem.ModalResult:=mrcancel;
tem.Free;
close;
// tem.Free;
end
else
begin
jisuanrenshu('y',tem);
tem.Free;
end;
end;

for j:=1 to tj do
begin
tem:=Tform1.Create(self);
if tem.ShowModal<>mrok then
begin

tem.modalresult:=mrcancel;
tem.Free;
close;
// tem.Free;
end
else
begin
jisuanrenshu('l',tem);
tem.Free;
end;
end;

for k:=1 to tk do
begin
tem:=Tform1.Create(self);
if tem.ShowModal<>mrok then
begin

tem.modalresult:=mrcancel;
tem.Free;
close;
// tem.Free;
end
else
begin
jisuanrenshu('p',tem);
tem.Free;

end;
end;

end;
'y': //营
begin
ydwparent:=label16.Caption;
ytj:= strtoint(edit3.text); //营下连的个数
ytk:=strtoint(edit4.text); //营下直属排的个数
for j:=1 to ytj do
begin
tem:=Tform1.Create(self);
if tem.ShowModal<>mrok then
begin

modalresult:=mrcancel;
tem.Free;
close;
end
else
begin
jisuanrenshu('l',tem);
tem.Free;
end;
end;

for k:=1 to ytk do
begin
tem:=Tform1.Create(self);
if tem.ShowModal<>mrok then
begin

tem.modalresult:=mrcancel;
tem.Free;
close;
// tem.Free;
end
else
begin
jisuanrenshu('p',tem);
tem.Free;
end;
end;
end;

'l': //连
begin
ldwparent:=label16.Caption;
ltk:=strtoint(edit3.text); //连下排的个数
for k:=1 to ltk do
begin
tem:=Tform1.Create(self);
if tem.ShowModal<>mrok then
begin

modalresult:=mrcancel;
tem.Free;
close;
end
else
begin
jisuanrenshu('p',tem);
tem.Free;
end;
end;
end;
'p': //排
begin

end;
end;
modalresult:=mrok;

end;

tem实际上是本身这个form1动态产生的form
我希望任何一个form按取消后,所有的动态产生的form都释放!
但我的程序只能释放当前的form.不能释放以前产生的form !
 
It's time to end this topic!
 
多人接受答案了。
 
后退
顶部