在BCB中使用VCL控件数组2

王朝vc·作者佚名  2008-06-01
窄屏简体版  字體: |||超大  

我的《BCB中使用VCL控件数组》中,提到了用TList来实现时无法释放资源的问题,结果今天就得到了答案,邬彦华等等网友都指教了TList实现的释放方法,定义代码同前文:

for (int i=1;i<=ButtonCount;i++)

{

TSpeedButton *spdBTn=new TSpeedButton(this);

spdBtn->Parent=ScrollBox;//指定父控件

spdBtn->Caption=IntToStr(i);

spdBtn->Width=80;

spdBtn->Height=80;

spdBtn->OnClick=ButtonClick;

spdBtn->Left=intLeft;

spdBtn->Top=intTop;

spdBtn->GroupIndex=1;

spdBtn->Flat=true;

intLeft=intLeft+80+intSpace;

if (i%LineCount==0)

{

intTop=intTop+80+intSpace;

intLeft=intSpace;

}

buttons->Add(spdBtn);//buttons是一个TList的指针

}

释放资源的代码如下:

int num = button->Count;

for(int i=0;i<num;i++)

{

delete (TSpeedButton *)button->Items[i];

}

其实说穿了就是删除TList的每一项,不过因为TList->Items的类型是void *,在C/C++中,void *可匹配任何类型,所以只要加一个强制类型转换(TSpeedButton *)就可以了,当然用(TObject *)等也是可以的,因为TObject是VCL中所有类的基类,而基类的指针是可以指向它的直接或间接子类的。

两种方法的比较:我上次的方法可说是典型的C++解决方法,而这种方法可说是C++Builder的解决方法,用双重指针比较灵活、高效,但大家都知道,多重指针可不那么好懂,想当初我曾用过4重指针(不要用那么目光看着我!),到后来我自已都糊涂了。而这次的方法比较好懂,并且能用TList类的方法,使用比较方便,但不如上一种高效,总的来说,两种方法各有优劣,具体使用那一种,就看个人的喜好了。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航