如何给控件中string类型的published属性赋初值(100分)

  • 主题发起人 主题发起人 haisheng
  • 开始时间 开始时间
H

haisheng

Unregistered / Unconfirmed
GUEST, unregistred user!
我写了一个控件,部分代码形式如下:
TMyControl=class(TWinControl)
private
FFreshhotkey: string;
published
property Freshhotkey string read FFreshhotkey write FFreshhotkey;
end;
我想让Freshhotkey有一个初始值'F5',我在属性的定义后加了一个default 'F5',delphi编译通不过,default不支持string类型。
请问各位高手,如何为控件string类型的published属性赋初值?

 
在Create里赋值
 
我试过不行,我在TMyControl的create方法中写了一句话:Freshhotkey:='F5'。
我按照上面的方法写好这个控件后,然后我使用这个控件。
下面我是这个控件的使用者。
控件为了方便用户给属性赋了一个初值,但是有些用户可能不要这个缺省值。我有很多窗口使用这个控件,大多数窗口要这个缺省值,但是有个窗口我不需要,我在IDE中把Freshhotkey的值擦空。然后我运行程序,出现了一个我意想不到的结果,Freshhotkey的值是仍然'F5',而不是空(此时我控件的用户,我不要这个初始值,我希望是空值)。我保存工程,下次打开时,Freshhotkey的值也是'F5'。
我开始不知道怎么回事,后来才知道,原来delphi在dfm窗体文件中不保存空值的属性,所以如果仅仅在create赋值,是不正确的。
这个问题我搞了很久,一直没有搞定,所以我才请教各位,看大家有方法解决。
 
你在你的控件里定义个OnCreate事件,如果你想改变默认的设置就写
OnCreate处理函数不就行了。
 
在你控件的Create中这样写试试:
constructor TMyControl.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
 
xxx.create;
xxx.Freshhotkey:='';

这个方法简单 :)
 
To xeen:
你总要有个地方调用OnCreate方法,你在何处调用这个方法。
我曾经试过在delphi的load事件中写这句话,运行结果总是不对。
delphi在下次加载这个控件时,会调用create事件的,要加载dfm文件。如果有某个事件,只是在你第一次把控件放到窗口上时运行,以后永远不运行,我想可以达到我的目的。我很想知道应该写在那个地方。
 
你非得在设计期间赋值吗,如果在运行期赋值.可以有很多时机,
比如你控件所在Form的OnCreate事件。
 
default不是给属性赋初始值的。而是窗体文件是否自动保存的。
赋初始值应该在CREATE中
 
在Create中给 FFreshhotkey赋初始值,把Defalut去掉。
 
各位大侠,我是在create中写的,但是不对啊。如果有什么特别的技巧,请各位指教。
另外请各位仔细看一下第1个和第3个帖子,谢谢。
 
Create时检查组件状态,设计期赋初值,运行期不给初值
 
请问山不厌高,具体如何实现哪?
 
你可以定义一个无参数的函数,返回值为boolean,将此函数放于stored处,在函数中进行复杂的判断,来确定是否要保存值
 
To 山不厌高:
我有一次是把stored设为true,即一直是保存的,但是空字符串是不保存的。
我不太明白你所的话的作用是什么,麻烦你讲的具体点,谢谢!
 
property Freshhotkey string read FFreshhotkey write FFreshhotkey default 'f5';

...
constructor create(...);
begin
FFreshhotkey :='f5';
end;
 
property Freshhotkey string read FFreshhotkey write FFreshhotkey default 'f5';
这句话编译通不过
 
困难的问题,参考 TComponent.Caption TComponent.Name
 
fantasy讲的有可能是一个解决的方向
 
不能为空但可以是'null'之类的,当用户清空属性时就将属性设置为'null'。
当然,你要自己写属性的读写过程。
还有,label.caption用的就是string属性,它为什么可以保存,你可以看看源码。
 
后退
顶部