关于判断form是否已存在(100分)

  • 主题发起人 主题发起人 3p
  • 开始时间 开始时间
3

3p

Unregistered / Unconfirmed
GUEST, unregistred user!
假设我的程序有几个form,其中1个主form,其他的form是MDI设置不是由程序自
动创建,让用户点击菜单后触发application.createform()创建,form在close
时自动release,问题是点击菜单激活某个form后,再次点击菜单发出同样的创建
form的命令,这样便存在了2个一样的form,同时active在桌面上,如何避免?
有否某个函数可以判断某个form是否已创建?避免createform的再次执行?
 
用以用assigned判断一指针是否已存在。
if not Assigned(form2) then
begin
Application.CreateForm(tform2,form2);
form2.show;
end;

但应注意form2.free或form2.release后应加入form2:=nil

 
可以使用FindWindow(窗口的类名,窗口的标题)函数,它可以判断任意窗口的存在与否!如果该窗口不存在返回0.
 
如果要用assigned查的话,注意在所有使用了form1.free后面
要加上form1:=nil,因为有时候,Free会出现没有将变量置为
nil的情况,这样的话,assigned查出来就永远是true了。
 
唐晓锋
findwindow( )我也曾试过,但好像不成功!你能对其中的参数及这函数详细讲述
一下吗?
 
tell you a very simple method!
1>为每个MDI页面定义一个参数如:PageFlag:boolean;
2>FormCreate中赋予初值 PageFlag:=False;
3>第一次create时赋值TRUE;
4>每次create mdi时检查一下该参数,为TRUE就不可再create Mdi
5>在Mdi realease 时将PageFlag该为False;
 
DNChen说的完全正确,请结束此问题
 
findwindow('MainForm','学生成绩管理系统');
你调试程序的时候已经有一个窗口存在了,
你可以在form创建的时候把MainForm的caption改掉就正确了.
 
只需要另菜单上的一相应项Enabled和Disabled就行了, 不需要判断Form是否存在.
在菜单项的事件中另该菜单项Disabled, FormFree时再加上Eanbled.
 
menxin的方法比较好,也可以这样:
if Form2<>nil then
...
>但应注意form2.free后应加入form2:=nil
 
其实不要关闭FORM,在FORM的OnClose事件里设置:
Action = caHide,在显示大时候用FORM.Show,只要
让FORM自动创建,VISIBLE缺省为FALSE,就根本不
会有任何问题。
 
lhz的日子过的好舒服,相信你的用户都是用PIII的
否则怎么敢这么耗费内存?
记得以前的一个朋友开玩笑说:“开开心心做程序员,
把你的客户当成都是用IE(可以用ie的ocx了),当netscape
不存在,把你的客户当成PIII+256M内存,当PII以下芯片
不存在!”
 
我的机器都是256MB内存,而且正准备来一台1GB内存的机器.
但是,即使是32MB的机器我想存几个FORM应该是没有问题的.
一个FORM不超过1KB,有时候要存储以前的输入,这样也是很
方便的.对CPU的要求来说这样做比临时生成要少.
 
var handle:integer;
1.建立form:
Application.CreateForm(TfrmStart, frmStart);
2.查找form:
handle:=findwindow('TfrmStart',nil);
if handle<>0 then

begin
//窗口建立了
end
else
begin
//窗口不存在
end;
 
多人接受答案了。
 
后退
顶部