将组合框添加到c ++ builder中的listview控件中

时间:2013-02-04 09:19:05

标签: c++builder vcl

我想创建一个包含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);

}

1 个答案:

答案 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字符串的属性。