0

在 Linux 上的 Lazarus 中,我将一个类注册为一个组件,这样我就可以将它放到一个表单上。

就像一个魅力,除了我可以发布的属性仅限于简单类型,如字符串和整数。
每当我尝试发布像 TStringList 或 TImage 这样的属性时,当我在对象检查器中单击它时,它会引发“访问冲突”。

我将我的代码与标准组件进行了比较,但我看不出它们的不同之处。

那么在对象检查器中使用这些属性需要哪些额外的步骤呢?

4

2 回答 2

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;
于 2011-02-05T04:12:42.057 回答
0

我认为这与 Delphi 中的大致相同,对于要在设计时使用的复杂类型,需要有处理显示/编辑它们的设计时代码。

于 2010-01-26T12:05:53.073 回答