控件TLabeledEdit的问题(20)

  • 主题发起人 主题发起人 liuguilg
  • 开始时间 开始时间
L

liuguilg

Unregistered / Unconfirmed
GUEST, unregistred user!
TLabeledEdit的源码里面的过程procedure TCustomLabeledEdit.Notification(AComponent: TComponent; Operation: TOperation);begin inherited Notification(AComponent, Operation); if (AComponent = FEditLabel) and (Operation = opRemove) then FEditLabel := nil; //这里的作用是什么,为什么不写为FEditLabel.free.end;
 
估计 free 是 parent 的事情,我们知道notification 是通知,只是给对象实例一个nil,防止错误引用,方便判定 assigned 源码读过,忘了。 有另外一个过程在处理。 if Assigned(FEditLabel) then exit; //为了这个 FEditLabel := TBoundLabel.Create(Self); FEditLabel.FreeNotification(Self); FEditLabel.FocusControl := Self;你看 其owner 是 self ,而继承与tcustomedit 会自动释放
 
有的free掉后 用Assigned仍然能找到,就用了freeandnil
 
如果我们将控件关联属性指向了一个控件,可是后来又将被指向的控件删除了,那么我们的控件关联属性是不会自动删除的,这样就会造成控件关联属性指向的控件不存在的现象。我们必须自动感知被关联控件的删除并重新设定控件关联属性为不指向任何控件,这样就避免了错误的发生。这句话的意思是:如果控件被删除并且被删除的控件(因为我们的控件可能向多个控件注册了消息)是LinkLabel,那么我们就设定LinkLabel属性不指向任何控件。
 

Similar threads

S
回复
0
查看
589
SUNSTONE的Delphi笔记
S
S
回复
0
查看
686
SUNSTONE的Delphi笔记
S
后退
顶部