龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

在BCB中使用VCL控件数组2

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
我的《BCB中使用VCL控件数组》中,提到了用TList来实现时无法释放资源的问题,结果今天就得到了答案,邬彦华等等网友都指教了TList实现的释放方法,定义代码同前文: for (int i=1;i {

  我的《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

  

{

  

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

  

}

  

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

  

  

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

  

精彩图集

赞助商链接