关于Sender.free 的问题,急!!

cmycs 2007-04-02 12:06:06
procedure TForm1.Label1Click(Sender: TObject);
begin
Sender.Free;
end;

procedure TForm1.Label2Click(Sender: TObject);
begin
Sender.Free;
end;
第一个可以执行,第二个不行;为什么????
...全文
149 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
cmycs 2007-04-02
  • 打赏
  • 举报
回复
一样不行
walkmangood 2007-04-02
  • 打赏
  • 举报
回复
如:
label1:=nil;
Sender.Free;
walkmangood 2007-04-02
  • 打赏
  • 举报
回复
先nil,在FREE
HsWong 2007-04-02
  • 打赏
  • 举报
回复
报什么错?
cmycs 2007-04-02
  • 打赏
  • 举报
回复
不知道有没有高手帮助一下
walkmangood 2007-04-02
  • 打赏
  • 举报
回复
是过了,我用的D6,没问题,没发生错误,你可以换台电脑是是
appms 2007-04-02
  • 打赏
  • 举报
回复
再说两句,Label类别本身不是具备Handle的控件,靠Vcl的事件分派机制重新伪装成有事件接管能力的控件,而VCL是在Form的Controls表中查找Label控件,找到后留下的是个Index,然后调用Label的事件处理程序,之后又用这个Index做后续的一些事情,如果调用label的事件处理程序中释放了这个Label就导致后面使用这个Index出现问题。所以要异步的通过消息机制释放Label。不过我的另外的一个建议是设置Label的Visible属性,不知是否适合你的情况
lihuasoft 2007-04-02
  • 打赏
  • 举报
回复
FreeAndNil(sender);
appms 2007-04-02
  • 打赏
  • 举报
回复
在控件产生事件中释放这个控件有时会导致保护错误(Access violation),一般可以PostMessage给Form的Handle,如自定义的WM_FREELABEL2,然后书写消息接管程序,在其中释放。

5,402

社区成员

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

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