delphi freeandnil不能用sender给窗体指针赋Nil??

zsddtxwd3 2010-10-30 11:52:45
我在程序里动态创建多个窗体,把写好的close程序指定给它们。在关闭这些窗体的时候都调用同一个close,我想在close事件里用fillandnil实现free与赋Nil值,代码是:
procedure myform.subformclose(sender:tobject;var Action: TCloseAction);
begin
fillandnil(sender);
end;

执行以后发现如果调用assigned(被关闭窗体),还是返回true,这是怎么回事啊?
能只利用窗体的name来完成对窗体的free与赋Nil吗?
...全文
78 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
iamduo 2010-10-31
  • 打赏
  • 举报
回复
我理解你的想法。不过为什么不能
procedure subformclose(var sender:tobject)
这样写呢?
是不是想搞个for 循环,把所有Form的OnClose 都定位到这个函数上?
……
或许一条条写,也没什么吧?!
毕竟,在跑之前,还是得先走。
跑起来容易摔跤,走着可能安心很多。
zsddtxwd3 2010-10-31
  • 打赏
  • 举报
回复
抱歉,是回复给iamduo的
zsddtxwd3 2010-10-31
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 chenjun_0312 的回复:]
Action := caFree;就行了。
[/Quote]
改变传递参数类型的话是不能把subformclose指定给myform的onclose事件的,指定的事件程序用的参数应该与正常生成的事件参数完全一样才行。
zsddtxwd3 2010-10-31
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 iamduo 的回复:]
我理解你的想法。不过为什么不能
procedure subformclose(var sender:tobject)
这样写呢?
是不是想搞个for 循环,把所有Form的OnClose 都定位到这个函数上?
……
或许一条条写,也没什么吧?!
毕竟,在跑之前,还是得先走。
跑起来容易摔跤,走着可能安心很多。
[/Quote]
试过了,会报错:parameter lists differ;
不过现在已经解决了,我通过application.fincomponent定位窗体,然后把窗体赋值给TCOMPONENT变量,把这个这是传递给freeandnil。
iamduo 2010-10-30
  • 打赏
  • 举报
回复
想法不错。

procedure myform.subformclose(var sender:tobject;var Action: TCloseAction);
begin
fillandnil(sender);
end;

看一下区别的地方。
原因:引用过来的 Sender 没有修改最初的变量。
chenjun_0312 2010-10-30
  • 打赏
  • 举报
回复
Action := caFree;就行了。
zsddtxwd3 2010-10-30
  • 打赏
  • 举报
回复
自己顶,高手们出招吧,别隐身了!!!!!!!!!!!!

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧