在BCB中使用VCL控件数组(二)

翻译|其它|编辑:郝浩|2006-01-06 09:50:00.000|阅读 2100 次

概述:

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>


我的《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类的方法,使用比较方便,但不如上一种高效,总的来说,两种方法各有优劣,具体使用那一种,就看个人的喜好了。
 


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP