線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2060
推到 Plurk!
推到 Facebook!

VCL的ComboBox->Items->AddObject()正確用法?

答題得分者是:taishyang
wei0510
一般會員


發表:9
回覆:2
積分:2
註冊:2009-05-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-05-04 18:12:12 IP:203.67.xxx.xxx 訂閱
大家好,假設我有一個資料表如下:

編號 檔案名稱 檔案大小 建立日期 修改日期
001 AA.txt 1024 10/05/01 10/05/04
002 BD.txt 1048 10/05/02 10/05/04
003 DEF.txt 1024 10/05/03 10/05/03
... ... ... ... ...
099 FF.txt 65535 10/05/04 10/05/04

我想用一個ComboBox元件顯示所有的"檔案名稱",當使用者選定一個項目後,再將相對應的"編號"、"檔案大小"、"建立日期"、"修改日期"顯示再一個edit元件上。

目前我能查到的資料只有先建立一個繼承自TObject的class:

class TInfo : public TObject
{
public:
int No;
String Name;
int Size;
String MDate;
String RDate;
};

然後再Form建立的時候使用AddObject()的方式建立Combox清單:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
TInfo *Info001 = new TInfo ;
Info001 ->No = 001;
Info001 ->Name = "FF.txt";
Info001 ->Size = 1024;
Info001 ->MDate = "10/05/01";
Info001 ->RDate = "10/05/04";
ComboBox1->Items->AddObject(Info001->Name, Info001);
...
TInfo *Info099 = new TInfo ;
Info099 ->No = 099;
Info099 ->Name = "AA.txt";
Info099 ->Size = 65535;
Info099 ->MDate = "10/05/04";
Info099 ->RDate = "10/05/04";
ComboBox1->Items->AddObject(Info099->Name, Info099);
}

到這裡為止我就卡住了,我想請問下面幾個問題:
1.我在FormCreate用new來配置TInfo的實體物件,但是我應該在哪裡delete掉呢?因為如果在ComboBox1->Items->AddObject()就delete,那麼我在之後其他的VCL元件事件中應該就沒辦法使用了?
2.我的TInfo實體物件是在FormCreate配置的,那麼我在其他vcl元件的事件中(如:void __fastcall TForm1::Button1Click(TObject *Sender))使用呢?
3.我想要在Button1被按下的時候來顯示這些資料,但我不知道該用什麼方式利用ComboBox被選到的項目找出關聯的成員。

謝謝。
編輯記錄
wei0510 重新編輯於 2010-05-04 18:15:14, 註解 無‧
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-05-04 19:53:33 IP:122.116.xxx.xxx 訂閱
試試下面的程式

.h
typedef struct TInfo{
int No;
char *Name;
int Size;
char *MDate;
char *RDate;
}TInfo;
class TForm1 : public TForm
{
__published: // User declarations
public: // User declarations
TInfo *info;
__fastcall TForm1(TComponent* Owner);
__fastcall ~TForm1();
};

.cpp
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
info = new TInfo[10];
}
//---------------------------------------------------------------------------
__fastcall TForm1::~TForm1()
{
if (info){
delete [] info;
info = NULL;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
const TInfo tab[] = {
{1, "FF.txt", 1024, "10/05/01", "10/05/04"},
{99, "AA.txt", 65535, "10/05/04", "10/05/04"},
};
int tabSize = sizeof(tab)/sizeof(TInfo);
for (int i=0; i < tabSize; i ){
info[i].No = tab[i].No;
info[i].Name = tab[i].Name;
info[i].Size = tab[i].Size;
info[i].MDate = tab[i].MDate;
info[i].RDate = tab[i].RDate;
ComboBox1->Items->AddObject(info[i].Name, (TObject *)&info[i]);
}
ComboBox1->ItemIndex = 0;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int idx = ComboBox1->ItemIndex;
TInfo *p = (TInfo *)ComboBox1->Items->Objects[idx];
ShowMessage(p->No);
}
//---------------------------------------------------------------------------


編輯記錄
taishyang 重新編輯於 2010-05-04 19:54:24, 註解 無‧
系統時間:2024-04-25 22:24:10
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!