<b>在BCB中利用VCL控件数组2</b>[VC/C++编程]
本文“<b>在BCB中利用VCL控件数组2</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
我的《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类的办法,利用对比便利,但不如上一种高效,总的来说,两种办法各有优劣,具体利用那一种,就看个人的爱好了.
以上是“<b>在BCB中利用VCL控件数组2</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |