当前位置:主页>销售管理软件> 列表

类的问题(请大家关注一下)谢谢 找速达软件报价

记账软件版1楼: 连续的使用form1:=Tform.Create(Self);这样就创建了多个同名的form1.这样会不会有冲突,另外,在free的时候是否要注意什么,会不会同时销毁呢?另外,如果这个form1是一个子窗口的话,是用create(self)好还是create(nil)好?谢谢

2楼: 连续的使用form1:=Tform.Create(Self);这样就创建了多个同名的form1.这样会不会有冲突?答:冲突倒是没有,但是因为创建的窗体没有释放,会导致内存泄漏。所以每次创建的窗体不再用时要用free销毁。创建一个销毁一个。
create(self)是要通知application的,在退出程序时会自动销毁。用create(nil)就要自己销毁。 如速达软件大管家dvd

3楼: 谢谢墨剑!但请问为什么会没有冲突呢?如果没有冲突的话,为什么我不同同时将两个form都命名为FORM1呢?

4楼: 另外,如果有两个相同名字的button被创建,请问应用程序要如何识别呢?不过我发现倒是的确可以创建多个相同名字的button的,这是什么原因呢?谢谢

5楼: 还有,如果我用了这个语句form1:=Tform.Create(Self);它和用with Tform.Create(Self) do有什么区别,我用with语句没有给其赋值的话那个这个动态生成的form的名字是什么?用多个with Tform.Create(Self) do语句和多个form1:=Tform.Create(Self);的区别是什么呢?

6楼:   with Tform.Create(Self) do是创建了一个无名窗体,如果不指定参数为Self或其它控件,而是Nil,你在退出With do结构后就再没有机会访问它了

  连续的使用form1:=Tform1.Create(Self);的问题,我给举个风筝的例子你就明白了,TForm1好比是风筝的模板,Form1是那个放风筝的手,它只能拿一根线(因为实质是一个变量,2个字节)即使单独调用:
  TFrom1.Create(self)
也能生成一个实例,但是没有可用于放飞的线,写成
  form1:=Tform.Create(Self);
就是把线头放在Form1里面,再一次调用
  form1:=Tform.Create(Self);
这时发生什么?你可以想到:扔掉了原来的那根线,换了个新的!但是这个新和旧的因为是一个模子出来的,肯定用起来一样,所以不会报错,但不原来的那个,一撒手就不好找回来了对不对?
正如墨剑所言,create(self)是要通知application的,在退出程序时会自动销毁。用create(nil)就要自己销毁。
我有个地方不同意,通知的不是Application,而有Form1本身,这就很悬了,让高手指点吧

记账软件版7楼: 非常感谢icc的精彩指点,说得十分形象,请问你指的很悬的意思是什么呢?为什么会很悬呢?为什么子窗口不可以定义成self呢?

8楼: 连续的使用form1:=Tform.Create(Self);

在Form1没有被释放之前,下一次创建就会出错的!

9楼: 学习

10楼: to lxian:have you try it ?在Form1没有被释放之前,下一次创建就会出错的!

11楼: 我说的悬,是因为我认为,既然Self指的Form1,是不是就是把新实例的“线头”交由Form1变量保存,属主又定义为Form1本身,这时候内部的机制我不清楚,一会我有空了写段代码测试一下它的机制

12楼: 谢谢icc,如果你所说的线头由Form1变量保存的话,会不会在form1销毁的时候释放掉呢?


那么我在手动释放这个Form1的时候是不是不要写上form1:=nil了呀?这样不正是完全的释放资源了吗:)如果是由application来释放的话。我手工掉用cafree的时候不就是不能完全释放资源了吗?这样不是非得等到掉用者来释放它了吗? 如速达软件报价

13楼: Form.free的结果就是Form1 = nil
一般就是写了free就可以了,这时它自动就是nil了
如果创建时指定的owner为Application或其它组件,你也可以手工free,Application.free的时候,就不用再free这个窗体了,如果你不手工free,application.free的时候就会代你做这件事
  如果是TForm的子类,推荐使用Create(Application)的用法,如果是在Form中定义的其它组件,推荐使用Create(Self),指定具体的Owner有一些VCL的附加操作,但对效率没什么影响,用Ceate(nil),如果你忘了free就是内存泄漏

记账软件版14楼: 多人接受答案了。

15楼: ICC:推荐使用Create(Application)的用法,为什么要这么推荐

16楼:   因为窗体里的函数,self指的就是窗体本身,如果用这个窗体类创建一个新实例,属主指定为本身,这不太好
  我也只是猜测