程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 在BCB中使用VCL控件數組2

在BCB中使用VCL控件數組2

編輯:關於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類的方法,使用比較方便,但不如上一種高效,總的來說,兩種方法各有優劣,具體使用那一種,就看個人的喜好了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved