您的位置:首页 > 其它

关于继承于TCheckListBox的子类对 Items属性的修改

2007-04-12 17:20 239 查看
在子类中重写了父类的属性

__property TStringList* Items = {write = witem, read = ritem};

void __fastcall witem(TStringList* s);

TStringList* __fastcall ritem();

在这个属性的读写函数中,可以对Items指针的地址进行操作和修改,得到完整的数据并加入自己的代码。

然而,当修改或者调用Items中的属性和方法的时候。就不能即时的对数据变化做出同步反应,执行加入的代码。

XX->Items->Add("Test"); // 执行顺序: TStringList* l =XX->Items::ritem(); l->Add(); 无法了解到加入的数据。并对其执行操作。

对于这种情况可以做一种折中的方法,不过会对代码的效率有一定影响。

[ 在调用属性Items的时候,对需要的数据进行读取并做出判断。如:写一个专用函数当读取属性时执行,对需要同步反应的数据做出调整。

XX->Items->Add("Test"); //XX->Items[3] = "Test";

//如果Items->Count 发生变化,则需要对对象Other做修改,Other->Count = Items->Count;

bool __fastcall rechangeother()

{

if(Other->Count==XX->Items->Count ) return false;

Other->Clear();

for(int n = 0; n <XX-> Items->Count; n++)Other->Add(XX->Items->Strings
);

return true;

}

在执行代码中:

{

rechangeother();

XXX = Other->Items->Strings[XX->Items->Count];

}

此种方法会对程序的编写思路产生影响,在有大量的代码时会产生问题。使情况变复杂。

这时可以使用这种方法,不过同样会对代码效率产生影响。还有可能比第一种效率差,可它的安全性较高。

修改自定义的属性方法ritems,且仍需一个辅助函数。同上面的rechangeother,对数据变化做响应。

TStringList* __fastcall ritems()
{

rechangeother();

return Parent::Items;

}

这样每次调用属性Items的时候都会修正数据的准确性。

而无须在做判断。不过可惜了效率。

<小艺>哪位高人有好方法请给本人信息,谢谢。

email: programuser@citiz.net qq: 694796939
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: