在BCB中利用VCL控件数组2
我的《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类的要领,利用较量利便,但不如上一种高效,总的来说,两种要领各有黑白,详细利用那一种,就看小我私家的爱好了。