它並不顯示一個TComboBox
因爲你還沒有真正設置TComboBox
是TListView
的子控件。您所做的只是將TComboBox
指針存儲爲與TListItem
關聯的用戶定義值。這對用戶界面沒有影響,因此擺脫它:
for (int i = 0; i < 10; i++)
{
TListItem *items = ListView1->Items->Add();
items->Caption = IntToStr(i);
items->SubItems->Add("combo"+IntToStr(i));
}
要實際顯示TComboBox
的TListView
裏面,你必須指定TListView
作爲TComboBox
的Parent
,然後使用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字符串。
請注意,請儘量避免使用C-cast並使用C++類型轉換 –