关于属性的default值(100分)

  • 主题发起人 主题发起人 163.com
  • 开始时间 开始时间
1

163.com

Unregistered / Unconfirmed
GUEST, unregistred user!

我自定义一个控件,并新增加上一个属性如下:

private
{ Private declarations }
procedure wrhuang(const Value: integer);
function rehuang: integer;
published
{ Published declarations }
property huang:integer read rehuang write wrhuang stored true default 4;

当我把控件安装后,把控件加到form上,发现huang的值是0而不是4
不知为什么?
 

当Stored 后面的表达式的值为False时,不把属性当前的值存到*.dfm文件中;
当Stored 后面的表达式的值为True时, 就首先把属性当前值与Default子句指定
的默认值(如果有的话)比较,如果相等就不存储,如果不等或没有指定默认值,
就把属性的当前值存到*.dfm文件中。

你的控件刚安装时,function rehuang: Integer 的返回值是0
 
那能否撇开stored来说明一下defalut的作用

在我的心目中defualt的作用是,在没有给这个属性设定某个值时,那属性的当前值是
default 指定的值

例如
property huang:integer read rehuang write wrhuang default 4;
一开始的值是4而不是0

我这种想法不对吗?


 
------这个说法不对
Default指定的默认值,只是用于与属性的当前值进行比较
以决定是否把属性的值存储到*.dfm文件中.
至于属性的初始值,与属性的默认值没有必然联系
尽管有时这两者是相同的,属性的初始值是在类的构造中设定的.

一开始的值是0而不是4
 
1)那这样说,如果没有stored,那default的设定就没有意义?

2)我经常看到属性里没有stored但有default

3)如果属性没有stored,那defalut起到什么作用
 
Delphi使用Default值只是用于将属性保存到流中,而不会当从流中读取它或初始建立它时使用
该值,如果属性的值与当前值与缺省值相同,组件根本不会将属性保存到流中。
 
还是不明白
 
1)那这样说,如果没有stored,那default的设定就没有意义?

-----再说一遍, 没有Stored, 就是Stored True;

2)我经常看到属性里没有stored但有default
-----同上

3)如果属性没有stored,那defalut起到什么作用

-----同上


补充说明:
Delphi在存储组件状态时,首先会去检查这个组件的各个声明为Published
属性的存储方式子句.如果一个属性当前的内容和Default值不一样,
或者根本没有写Default编译指令;并且,Stored编译指令后面跟的是
True, 那么Delphi就会把这个属性的值写到*.dfm文件中, 否则, 不写.
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
491
import
I
后退
顶部