从TCustomListView派生的VCL控件,抛出Exception EReadError with message "Property EnabledColor does not exist"

merlinran 2003-07-24 07:01:06
第一次做控件,希望能得到点拨。

我从TCustomListView派生了一个VCL控件,主要是能够改变显示颜色。用了三个属性:EnabledColor、NonEnabledColor和SelectedColor,然后为它们各自提供了一对Get/Set函数。同时除了OnCustomDrawItem之外,其它的属性都原样publish。

最初时设计时只有一个属性叫做MyColor,试了一下,很正常,无论设计时还是运行时,都能够根据Enabled的状态和MyColor的设置动态显示颜色。但变成三个属性之后,在设计时颜色可以自动变,但一旦运行,就会抛出异常,而且根据我跟踪的结果,此时还仅仅是在构造函数中(此时应该没有任何显示操作)。
...全文
62 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Siney 2003-07-26
  • 打赏
  • 举报
回复
你跟踪一下,把你的构造函数及CreatWnd函数(如果重载了)贴出来
merlinran 2003-07-25
  • 打赏
  • 举报
回复
可惜,不是上面所指出的情况。
我的属性是这么写的:

__property Graphics::TColor EnabledColor = {write=SetEnabledColor, read=GetEnabledColor, default=clBlue};
Get/Set放在public节:
Graphics::TColor __fastcall GetEnabledColor();
void __fastcall SetEnabledColor(const Graphics::TColor color);

这是我自己建立的属性,是不是缺少什么东西,才造成EReadError?按照解释,EReadError是在从Stream中读时,没有相应的数据,才抛出的异常,可是需要从Stream中读取什么?
Siney 2003-07-24
  • 打赏
  • 举报
回复
你是不是在构造函数中初始化
EnabledColor=??了

如果是这样是不正确的,因为这时类还没有构造完成,所以属性还不可用,

如果你要初始化,你需要使用FEnabledColor=??

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧