我有一个主form.有十几个二级form。都是动态生成的。(100分)

  • 主题发起人 主题发起人 Tsunky
  • 开始时间 开始时间
T

Tsunky

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一个主form.有十几个二级form。都是动态生成的。
我希望有第二个form.create的时候把前面create的form.free掉。
1.那位大侠作过这样的,介绍一下。
2.我如何限制一个form只ceate一次。
3.判断一个form有没有被free是怎么判断
 
在创建的时候:
if Assigned(Form1) then
do nothing or alert
else
Create;
在释放该窗体时,要赋值 Form1:=nil;
注意:Delphi将一个窗体释放后,是不会自动将变量做什么改动的,必须手工写=nil
 
方法1:
with form.Create do
try
...
ShowModal;
...
finally
Free;
end;
这样保证只有一个 创建的对象


2.var aa :TFormX = nil ;
使用:
if Assigned(aa) then
FreeAndNil(aa);
aa := TFormX.Create;
不知道符合否你的要求
 
开 MUTEX 。
 
我希望有第二个form.create的时候把前面create的form.free掉。
这个如何作。
我是form.show的
 
关于你的第一个问题:
假设你的MDI主窗体叫Form1,那么用Form1.ActiveMDIChild可以访问你当前活动着的子
窗体,在每个子窗体的OnCreate中写上:
if Form1.ActiveMDIChild<>nil then
Form1.ActiveMDIChild.Close;
就可以将活动的子窗体(也就是上一个创建的)释放了
当然,还是不要忘了OnClose里的Action:=caFree;和OnDestory里的FormX:=nil

或者干脆在创建新子窗体前把所有打开的旧子窗体(不管一个还是多个)统统关掉:
for i:=Form1.MDIChildCount downto 0 do
Form1.MDIChildren.Close;
 
多人接受答案了。
 
你接受答案了,我就随便说一下吧,省得有混分的嫌疑。
 
说详细一点好吗?是自己实现信号灯还是用windows的?直接发消息可否?
 
后退
顶部