我想创建一个包含2列的列表视图。在第一列中它必须是行号,在第二列中它应该包含一个组合框。我编写以下代码,但第二列只显示“组合”字符串。它没有显示任何组合框。有什么不对?
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 :(得分:2)
它没有显示TComboBox
,因为您实际上并未将TComboBox
设置为TListView
的子控件。您所做的就是将TComboBox
指针存储为与TListItem
关联的用户定义值。这对UI没有影响,所以摆脱它:
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
指定为Parent
的{{1}},然后使用TComboBox
方法可以在需要显示时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
用于管理ComboBox字符串的属性。