我们正在致力于在Delphi Xe2平台上创建自定义组件。我正在创建带有火猴自定义组件的发布属性。我设置了布尔值、自定义类型等默认值,但我设置的是缺省整数值。我使用类TControl1 = class(TControl)。发布的属性测试: Integer read FTest write Set Test Default10;在组件查看器上,我的自定义组件显示0 default.Sorry表示我的英语不好。请任何人帮帮我
发布于 2012-09-03 16:12:12
如果我没记错的话,default
指令没有设置您的私有成员FTest
。您必须在组件的构造函数中对其进行初始化,如下所示:
TControl1 = class(TControl)
private
FTest: Integer;
procedure SetTest(Value: Integer);
public
constructor Create(AOwner: TComponent); override;
published
property Test: Integer read FTest write SetTest default 10;
end;
.
.
.
constructor TControl1.Create;
begin
inherited;
FTest := 10;
end;
发布于 2012-09-03 16:26:32
指定default
属性值不会在运行时将该值分配给该属性。它所做的一切就是控制属性的存储方式。如果存储属性时属性的值等于默认值,则VCL流框架将省略该属性。
documentation是这样说的:
声明属性时,可以为其指定默认值。VCL使用默认值来确定是否将属性存储在表单文件中。如果未指定特性的默认值,VCL将始终存储该特性。
..。
声明默认值不会将属性设置为该值。组件的构造函数方法应该在适当的时候初始化属性值。但是,由于对象始终将其字段初始化为0,因此构造函数不一定要将整数属性设置为0,将字符串属性设置为null,或者将布尔属性设置为False。
换句话说,除了设置默认值之外,还必须在组件的构造函数中初始化该属性。您有责任确保将其初始化为与指定为default
的值相同的值。
就我个人而言,我总是发现设计中固有的重复有点令人沮丧。设计者已经成功地在语言中构建了对DRY principle的违反。您提出这个问题本身就说明了设计的弱点。指定了default
值之后,您会惊讶地发现编译器似乎忽略了您,并要求您重新设置它。
https://stackoverflow.com/questions/12244076
复制相似问题