一般情况下,我们用childf.free关闭窗口。
childf := Tchildf.create(form1)
try
  do smothing 
finally
  childf.free;
end

解决方案 »

  1.   

    如果要动态产生,则
    首先要声明一个变量,比如childF,这个变量是一个
    TchildF类型的,然后,则可动态产生一个TchildF类型的
    对象,用childF指向他,因此在程序中就可以用
    childf.free了。即可关闭窗口
      

  2.   

    如果我用childf:=Tchildf.Create(form1);同样的语句来建立多个窗口,这样是不是不好?我看过了,生成的窗口自动命名为childf_1,childf_2......但我怎样才能在form1的一个按钮事件中关闭其中一个窗口并使其closequery事件中的代码能够执行?
      

  3.   

    为什么不用Mdi结构?如果你自己控制父子关系,我的观点就比较麻烦了。
    定义消息。儿子中处理这个消息。关闭自己。
    儿子创建像老子登记,登记自己的handle.form1.button  click,发消息,向想要关闭的窗体发消息就行了。具体的控制不用我说了吧。
      

  4.   

    利用变量CHILD1,它实际是一指针,调用CHILD1.FREE;最好在加一句:CHILD1:=NIL;
    因为FREE并不将CHILD1指针置为NIL,CHILD1中仍保留地址.
      

  5.   

    如果我在应用中用 child:=Tchild.create(application);child.Parent(form1);
    相同的语句建立了三个窗口,怎样在form1的一个按钮中关闭它们呢??
      

  6.   

    如果我在应用中用 child:=Tchild.create(application);child.Parent=form1;
    相同的语句建立了三个窗口,怎样在form1的一个按钮中关闭它们呢??
      

  7.   

    caesar(lmr):
    用这个方法只能关闭最后一个建立的窗口,对于开始建立的窗口就不行了.
    laza(麻风瘦):
    怎样登记儿子的handle?
      

  8.   

       也许不用太麻烦:
       如果要关闭第n个子窗口,第n个窗口是childf_n则
       for i:=1 to screen.formcount do
          if screen.forms[i].formtype=Tchildf_n then
                begin
                       screen.forms[i].close;
                       screen.forms[i].free;
                 end;
      

  9.   

    to heifei():谢谢,不过要把formtype改成clasename,不能free,这样会出错