起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 405|回复: 13

【搞定】如何判断一个动态生成的窗体已打开?**

[复制链接]
发表于 2007-3-14 13:32:05 | 显示全部楼层 |阅读模式
EditForm := XYDAGL_FUNC.TMAINFORM.Create(Self.Context);
?????? 这里用什么判断阿?(在delphi 用过if not Assigned(EditForm) then  但在平台上不管用)
begin
  try
    EditForm.Show;
    EditForm.Parent := TabSheet;
  finally
    if EditForm.CloseSign = 1 then
      EditForm.Free;
  end;
end
else
    EditForm.Free;
回复

使用道具 举报

发表于 2007-3-14 15:28:47 | 显示全部楼层
if not Assigned(EditForm) then  只是判断这个变量EditForm是否为空
Assigned(EditForm) 跟 EditForm<>nil 是等价的
并不是判断窗体是否打开的
回复 支持 反对

使用道具 举报

发表于 2007-3-14 15:29:09 | 显示全部楼层
判断窗体打开应该是用窗体.visible
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-3-14 15:58:36 | 显示全部楼层
??????
begin
  EditForm := XYDAGL_FUNC.TMAINFORM.Create(Self.Context);
  try
    EditForm.Show;
    EditForm.Parent := TabSheet;
  finally
    if EditForm.CloseSign = 1 then
      EditForm.Free;
  end;
end
else
    EditForm.Free;

不好意思 应该是这样的 不能老创建 得看是否生成了窗体了再创建。 已经生成了窗体就不创建了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-3-14 15:59:42 | 显示全部楼层
这样的话 生成窗体 之前 EditForm 还是空 用visible会出错
回复 支持 反对

使用道具 举报

发表于 2007-3-14 16:16:04 | 显示全部楼层
if not Assigned(EditForm) then
begin
  EditForm := XYDAGL_FUNC.TMAINFORM.Create(Self.Context);
end;
  try
    EditForm.Show;
    EditForm.Parent := TabSheet;
  finally
    if EditForm.CloseSign = 1 then
    begin
      EditForm.Free;
          EditForm := nil;
   end
  end;
end
else
    EditForm.Free;
回复 支持 反对

使用道具 举报

发表于 2007-3-14 16:16:46 | 显示全部楼层
如果Free之后,没有:=nil 这个变量还是有值,但是再次调用就会出问题了,一定要:=nil
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-3-14 16:39:10 | 显示全部楼层
还是不行啊 我测了 无论有没有EditForm := nil; EditForm 在开始的是都是 “空对象”
回复 支持 反对

使用道具 举报

发表于 2007-3-14 16:45:45 | 显示全部楼层
当然了,你第一次执行,这个变量还没有赋值,当然是空值了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-3-14 16:49:24 | 显示全部楼层
是阿 第2次再点 还是 空对象 这个实现的目的就是为了只能运行一次, 就好象x3 平台的点目录树运行功能一样 每个功能只能出现一个
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2024-12-26 21:25 , Processed in 0.042045 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表