Delphi,在设计时,用零所有者创建时ComponentState,ControlState的状态是什么?

问题描述 投票:0回答:1

如果在设计时执行一个函数,并创建一个拥有零所有者的TComponent / TControl后代,则System.Classes中的以下代码将不会调用InsertComponent:

constructor TComponent.Create(AOwner: TComponent);
begin
  FComponentStyle := [csInheritable];
  if AOwner <> nil then AOwner.InsertComponent(Self);
end;

这样,我们的新对象将不会继承ComponentState。依赖于该组件的csDesigning标志的条件会发生什么?

if csDesigning in ComponentState
delphi pascal
1个回答
0
投票

条件将显示False

这对于您作为组件构建者来说,当您显然在没有所有者的情况下有意创建一个(子)组件时,完全不应该依赖于该组件是否由最终用户设计。如果是这样,那么您应该实现自己的“正在设计”状态的系统,但是更好的是应该重新设计您的需求。

对于覆盖的组件,您可以自己调用受保护的SetDesiging方法。

所有这些都假定您应该完全意识到在没有所有者的情况下创建设计时子组件的情况,除非您有非常有说服力的理由不这样做,否则通常应避免这样做。请记住,组件托盘上的组件始终应遵循默认的所有者机制。

© www.soinside.com 2019 - 2024. All rights reserved.