2013-02-04 107 views
0

我想創建一個包含2列的列表視圖。在第一列中它必須是行號,在第二個數字中它應該包含一個組合框。我寫下面的代碼,但第二列只顯示「組合」字符串。它不顯示任何組合框。什麼是錯的?將組合框添加到C++ builder的listview控件中

for (int i = 0; i < 10; i++) { 

TListItem *items; 
items= this->ListView1->Items->Add(); 
items->Caption=IntToStr(i); 

items->SubItems->AddObject("combo"+IntToStr(i),(TObject *)this->ComboBox1); 

} 
+0

請注意,請儘量避免使用C-cast並使用C++類型轉換 –

回答

1

它並不顯示一個TComboBox因爲你還沒有真正設置TComboBoxTListView的子控件。您所做的只是將TComboBox指針存儲爲與TListItem關聯的用戶定義值。這對用戶界面沒有影響,因此擺脫它:

for (int i = 0; i < 10; i++) 
{ 
    TListItem *items = ListView1->Items->Add(); 
    items->Caption = IntToStr(i); 
    items->SubItems->Add("combo"+IntToStr(i)); 
} 

要實際顯示TComboBoxTListView裏面,你必須指定TListView作爲TComboBoxParent,然後使用SetBounds()方法以位置和大小TComboBox每當你需要顯示它:

ComboBox1->Parent = ListView1; 
... 
RECT rect = {0}; 
ListView_GetSubItemRect(ListView1->Handle, SomeListItem->Index, 1, LVIR_BOUNDS, &rect); 
ComboBox1->SetBounds(rect.left, rect.top, rect.right-rect.left, rect.bottom-rect.top); 
// update ComboBox1->Items as needed... 
ComboBox1->Visible = true; 
... 
ComboBox1->Visible = false; 

雖這麼說,你正在嘗試做使用TValueListEditor組件,而不是被更好地處理什麼。根據需要向其添加項目,然後使用其ItemProps屬性將每個項目的TItemProp.EditStyle屬性設置爲esPickList,然後使用TValueListEditor.OnGetPickList事件或TItemProp.PickList屬性根據需要管理ComboBox字符串。