1

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

}
4

1 回答 1

3

它没有显示 aTComboBox因为您实际上没有将 设置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,您必须将 分配TListViewParentTComboBox然后在需要显示时使用该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 字符串。

于 2013-02-04T11:09:20.390 回答