我在程序里动态创建多个窗体,把写好的close程序指定给它们。在关闭这些窗体的时候都调用同一个close,我想在close事件里用fillandnil实现free与赋Nil值,代码是:
procedure myform.subformclose(sender:tobject;var Action: TCloseAction);
begin
  fillandnil(sender);
end;执行以后发现如果调用assigned(被关闭窗体),还是返回true,这是怎么回事啊?
能只利用窗体的name来完成对窗体的free与赋Nil吗?

解决方案 »

  1.   

    Action := caFree;就行了。
      

  2.   

    想法不错。procedure myform.subformclose(var sender:tobject;var Action: TCloseAction);
    begin
      fillandnil(sender);
    end;看一下区别的地方。
    原因:引用过来的 Sender 没有修改最初的变量。
      

  3.   

    改变传递参数类型的话是不能把subformclose指定给myform的onclose事件的,指定的事件程序用的参数应该与正常生成的事件参数完全一样才行。
      

  4.   

    我理解你的想法。不过为什么不能
    procedure subformclose(var sender:tobject)
    这样写呢?
    是不是想搞个for 循环,把所有Form的OnClose 都定位到这个函数上?
    ……
    或许一条条写,也没什么吧?!
    毕竟,在跑之前,还是得先走。
    跑起来容易摔跤,走着可能安心很多。
      

  5.   

    试过了,会报错:parameter lists differ;
    不过现在已经解决了,我通过application.fincomponent定位窗体,然后把窗体赋值给TCOMPONENT变量,把这个这是传递给freeandnil。