CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
花落谁家,你作主! 盛大widget设计大赛英雄榜
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

窗体变量的释放问题

楼主gaden007(斌)2001-12-28 14:16:45 在 Delphi / VCL组件开发及应用 提问

var   Form:TForm;     //全局变量  
   
  if   not   Assigned(Form)   then  
      begin  
          try  
              Form:=TFBar_Mid.Create(self);  
              Form.Show;  
          finally  
              Form.Free;  
              Form:=nil;  
        end;  
    end;  
  这样如果是showmodal就可以,如果是show就不行的,请问应该在那里写呢? 问题点数:20、回复次数:48Top

1 楼youfly(无名)回复于 2001-12-28 14:27:15 得分 0

当使用ShowModal时要使Finally下面语句的执行必需要关闭Form  
  而有show时,则不必,所以你这里用show的结果是Form.Show以后,马上执行Form.Free,所以就不行了Top

2 楼Liujc(阿聪)回复于 2001-12-28 14:28:02 得分 0

使用ShowModal则程序等待窗体关闭返回,而Show则是马上返回。  
  你可在窗体的OnClose事件中加入   Action   :=   caFree   ;Form   :=   Nil   ;  
                                                                                              //窗体名Top

3 楼xiaoxiao197821(你的笑对我很重要)回复于 2001-12-28 14:28:38 得分 0

用showmodal会有什么问题么Top

4 楼gaden007(斌)回复于 2001-12-28 14:33:18 得分 0

Liujc(阿聪) 不行呀,这样会出错的,  
  xiaoxiao197821(洪飞)用showmodal没问题,但我现在要用showTop

5 楼youfly(无名)回复于 2001-12-28 14:43:32 得分 20

你可以在Form的Close事件里写上Action:=caFree;  
  然后把Finally中的Form.free去掉就可以了;Top

6 楼Liujc(阿聪)回复于 2001-12-28 14:46:50 得分 0

你的OnClose事件是否为TFBar_Mid窗体的事件Top

7 楼m_leaner(和日本鬼子势不两立)回复于 2001-12-28 14:56:29 得分 0

来晚了Top

8 楼iampole(pole)回复于 2001-12-28 14:57:46 得分 0

youfly(无名):  
  和我一样的高手就是你了。  
  但是需要考虑的是Form是否会生成多个实例,但是本例中是不会的。Top

9 楼kylion(凯林)回复于 2001-12-28 15:05:33 得分 0

同意youfly(无名)的做法.Top

10 楼gaden007(斌)回复于 2001-12-28 15:28:04 得分 0

不行吧,  
  Liujc(阿聪) ,我的OnClose事件是在TFBar_Mid窗体  
   
  Top

11 楼gaden007(斌)回复于 2001-12-28 15:29:21 得分 0

如果在finally里写Free,那一建立就马上释放掉了,因为不是showmodal窗体Top

12 楼gaden007(斌)回复于 2001-12-28 15:43:05 得分 0

都走了?????????????Top

13 楼zswang(伴水清清)(专家门诊清洁工)回复于 2001-12-28 16:13:32 得分 0

if   not   Assigned(Form)   then  
      begin  
          try  
              Form:=TFBar_Mid.Create(self);  
              Form.Show;   //很快就执行了  
          finally  
              Form.Free;  
              Form:=nil;  
      end;  
  Top

14 楼zswang(伴水清清)(专家门诊清洁工)回复于 2001-12-28 16:15:48 得分 0

//建议  
      if   not   Assigned(Form)   then   Form   :=   TFBar_Mid.Create(Self);  
      Form.Show;  
  Top

15 楼zswang(伴水清清)(专家门诊清洁工)回复于 2001-12-28 16:17:16 得分 0

Form   :=   TFBar_Mid.Create(Self);  
  //                                               ~~~~~Self.Free会触发Form.Free    
  Top

16 楼gaden007(斌)回复于 2001-12-28 16:19:31 得分 0

如果self.Free不就是释放了本窗口了吗,   那还有什么用呀Top

17 楼zswang(伴水清清)(专家门诊清洁工)回复于 2001-12-28 16:27:22 得分 0

    if   not   Assigned(Form)   then   Form   :=   TFBar_Mid.Create(Self);  
      Form.Show;  
  Top

18 楼gaden007(斌)回复于 2001-12-28 16:30:03 得分 0

如果不把Form清空就不能第二次建立窗体,请帮忙呀Top

19 楼gaden007(斌)回复于 2001-12-28 16:32:14 得分 0

这样好像不会释放Form吧,因为Form是在第一个窗体上的变量Top

20 楼gaden007(斌)回复于 2001-12-28 16:58:19 得分 0

还在吗Top

21 楼zswang(伴水清清)(专家门诊清洁工)回复于 2001-12-28 17:29:21 得分 0

你想在什么时候释放Form?Top

22 楼gaden007(斌)回复于 2001-12-28 17:45:34 得分 0

想在FBar_Mid这个窗体关闭了之后释放Top

23 楼youfly(无名)回复于 2001-12-28 18:10:52 得分 0

用我的方法可行的,你可是不必管创建了多少个TFBar_Mid实例,因为在Close时会释放Top

24 楼gaden007(斌)回复于 2001-12-28 18:18:37 得分 0

在TFBar_Mid里只会释放掉它自己窗体的的东西,但Form是在它的父窗体上的,你那个方法好像没有释放掉吧,我试过也不行Top

25 楼zswang(伴水清清)(专家门诊清洁工)回复于 2001-12-28 18:20:31 得分 0

Form   :=   TFBar_Mid.Create(Self);  
  //                                             ~~~~~Self.Free会触发Form.Free    
   
  Top

26 楼gaden007(斌)回复于 2001-12-28 18:21:18 得分 0

是了,你说在Form的close里写,请请怎样可以在Form的close里写呢,因为Form只是一个窗体变量,怎样在它的close里写呢,是不是自己写一个过程,然后把它赋给Form的close呢Top

27 楼Kingron(单身走我路……)回复于 2001-12-28 18:22:41 得分 0

分数给youfly(无名) 吧。他的答案非常好的。Top

28 楼gaden007(斌)回复于 2001-12-28 18:22:58 得分 0

zswang(伴水)(被黑中) ,还是不明白你的意思   ,self.free释放不就是把父窗体释放掉了吗,但我不要关闭父窗体呀Top

29 楼Kingron(单身走我路……)回复于 2001-12-28 18:25:56 得分 0

gaden007(斌) :  
   
  >>>你说在Form的close里写,请请怎样可以在Form的close里写呢  
  选择Form,在Object   Inspect中,有一个Events页面,其中有一个OnClose事件,双击右边的空白,就可以写代码了。  
   
  P.S:真的很想在你的PP上面踢一脚!!!拜托,看看书再来问问题,这样的问题你也问?你也太心急了!学习Delphi不是这样的。,  
  Top

30 楼man8888(北京男人)回复于 2001-12-28 18:31:56 得分 0

呵呵。。。Top

31 楼thedream(梦幻使者)回复于 2001-12-28 18:58:49 得分 0

我也同意youflyTop

32 楼gaden007(斌)回复于 2001-12-29 11:09:00 得分 0

Kingron(戒网中……),呵呵,不要踢那么大力呀,很痛的。  
  你没看清楚我的题目吗?我的Form只是一个窗体变量来的,不是一个窗体呀,所以它没有Object   Inspect的。不过我已经解决了,就是在OnClose里写,不过是自己定义的事件,再赋给Form   的Close事件Top

33 楼gaden007(斌)回复于 2001-12-29 11:14:17 得分 0

不过还想问多个问题,完了再加多20再结贴  
  如果我所把这句加多个条件if   not   Assigned(Form)   and   Label1.Caption<>Edit1.text   then  
  我想同时可以建立多个窗体,请问又要怎样做呢?  
      Top

34 楼gaden007(斌)回复于 2001-12-29 13:30:12 得分 0

还有人来吗Top

35 楼halfdream(哈欠)回复于 2001-12-30 09:57:51 得分 0

 
  看来你真得多看看书了  
  if   not   Assigned(Form)   and   Label1.Caption<>Edit1.text   then     ???  
  这句显然就有问题.  
   
  同意Kingron(戒网中……)   
  Top

36 楼gaden007(斌)回复于 2001-12-30 14:54:54 得分 0

halfdream(哈欠) ,我想问下有什么问题?Top

37 楼wangxj333(天天真人)回复于 2001-12-30 15:31:31 得分 0

皮之不存,毛将焉附!Top

38 楼halfdream(哈欠)回复于 2001-12-30 15:33:18 得分 0

嗯.wangxj333(王老虎) 已经帮我回答了.  
   
  如果FORM的实例已经没有了,那LABEL1   ,EDIT1还有意义吗?  
  Top

39 楼gaden007(斌)回复于 2001-12-30 15:43:45 得分 0

哦,sorry,   应该改为   "or"     才对Top

40 楼largewang(成都:王臻义[老王][C#学习中断])回复于 2001-12-30 16:03:43 得分 0

caFree啊Top

41 楼gaden007(斌)回复于 2001-12-30 16:12:21 得分 0

应该改成这样:  
  if   (not   Assigned(Form))or   (Assigned(Form)   and   Label1.Caption<>Edit1.text)   then      
   
  释放Form我可以做到了,就是在OnClose里写,但如这样同时有多个窗体存在时我想关闭其中一个那么其它的也会关闭了Top

42 楼gaden007(斌)回复于 2001-12-30 16:41:29 得分 0

顶Top

43 楼gaden007(斌)回复于 2001-12-30 21:46:56 得分 0

u..........Top

44 楼morphia(吗啡)回复于 2001-12-31 08:50:05 得分 0

if   (not   Assigned(Form))or   (Assigned(Form)   and   Label1.Caption<>Edit1.text)   then  
  有问题,算术的优先级不对,你需要括号  
   
  if   (not   Assigned(Form))or   (Assigned(Form)   and   (Label1.Caption<>Edit1.text))   then  
  这样才对Top

45 楼gototop99(※ 今天的月亮,明天的太阳! ※)回复于 2001-12-31 09:01:38 得分 0

以上问题以解决!!!Top

46 楼gaden007(斌)回复于 2001-12-31 14:56:20 得分 0

多谢,是我打漏了  
  gototop99(巴蒂),还没解决的,如果同时建立了几个窗体,那只要关闭其中一个窗体,那么其它的窗都会关闭的Top

47 楼gaden007(斌)回复于 2001-12-31 15:49:02 得分 0

元旦放假了吗?????????????Top

48 楼007pro(水样天波)回复于 2001-12-31 16:26:02 得分 0

那只要关闭其中一个窗体,那么其它的窗都会关闭的  
  怎么关的,手工还是在程序中释放呢?   Top

相关问题

  • 急!!如何象释放窗体一样(set form1=nothing)释放变量????
  • 关于窗体变量
  • 怪:在窗体的通用声明中定义的dim变量,在窗体关闭时为何不会自动释放呢?
  • 窗体之间变量转换问题
  • 怎样用变量控制窗体?????!!!!!?????????????
  • 请教窗体间变量传递
  • 子窗体如何访问父窗体的变量?
  • 窗体释放的问题!
  • 窗体创建和释放?
  • 窗体释放问题!

关键词

  • 执行
  • 窗体
  • tfbar
  • 释放
  • 变量
  • onclose
  • 关闭
  • showmodal
  • self
  • mid

得分解答快速导航

  • 帖主:gaden007
  • youfly

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo