像魅力一样工作,除了我可以发布的属性仅限于字符串和整数等简单类型 每当我尝试发布类似TStringList或TImage的属性时,当我在对象检查器中单击它时会引发“访问冲突”。
我将我的代码与标准组件进行了比较,但我看不出他们在做什么不同。
那么在对象检查器中使用这些属性需要执行哪些额外步骤?
答案 0 :(得分:2)
要获得类属性,您需要: 1.在组件构造器中创建该属性 - 因此它永远不会为零 2.在您的属性Setter中,您需要从新值分配给您的组件。因此,您必须在组件中实现Assign方法或AssignTo。例如
TMyComponent = class
private
FString: TStrings;
published
property Strings: TStrings read FStrings write SetStrings;
end;
constructor TMyComponent.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
// always create it in the constructor so it will not be nil
FStrings := TStringList.Create;
end;
procedure TMyComponent.SetStrings(const AValue: TStrings);
begin
// this is correct statement
FStrings.Assign(AValue);
// this is not correct
// FStrings := AValue;
end;
答案 1 :(得分:0)
我认为这与Delphi大致相同,对于要在设计时使用的复杂类型,需要设计时代码来处理显示/编辑它们。