首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >设置火猴组件的默认整数值

设置火猴组件的默认整数值
EN

Stack Overflow用户
提问于 2012-09-03 16:05:51
回答 2查看 496关注 0票数 2

我们正在致力于在Delphi Xe2平台上创建自定义组件。我正在创建带有火猴自定义组件的发布属性。我设置了布尔值、自定义类型等默认值,但我设置的是缺省整数值。我使用类TControl1 = class(TControl)。发布的属性测试: Integer read FTest write Set Test Default10;在组件查看器上,我的自定义组件显示0 default.Sorry表示我的英语不好。请任何人帮帮我

EN

回答 2

Stack Overflow用户

发布于 2012-09-03 16:12:12

如果我没记错的话,default指令没有设置您的私有成员FTest。您必须在组件的构造函数中对其进行初始化,如下所示:

代码语言:javascript
运行
复制
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;
票数 4
EN

Stack Overflow用户

发布于 2012-09-03 16:26:32

指定default属性值不会在运行时将该值分配给该属性。它所做的一切就是控制属性的存储方式。如果存储属性时属性的值等于默认值,则VCL流框架将省略该属性。

documentation是这样说的:

声明属性时,可以为其指定默认值。VCL使用默认值来确定是否将属性存储在表单文件中。如果未指定特性的默认值,VCL将始终存储该特性。

..。

声明默认值不会将属性设置为该值。组件的构造函数方法应该在适当的时候初始化属性值。但是,由于对象始终将其字段初始化为0,因此构造函数不一定要将整数属性设置为0,将字符串属性设置为null,或者将布尔属性设置为False。

换句话说,除了设置默认值之外,还必须在组件的构造函数中初始化该属性。您有责任确保将其初始化为与指定为default的值相同的值。

就我个人而言,我总是发现设计中固有的重复有点令人沮丧。设计者已经成功地在语言中构建了对DRY principle的违反。您提出这个问题本身就说明了设计的弱点。指定了default值之后,您会惊讶地发现编译器似乎忽略了您,并要求您重新设置它。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12244076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档