[英]Add a combobox in to listview control in c++ builder
我想创建一个包含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);
}
它没有显示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));
}
要在TListView
实际显示TComboBox
,您必须将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
组件可以更好地处理您尝试做的TValueListEditor
。 根据需要向其添加项目,然后使用其ItemProps
属性将每个项目的TItemProp.EditStyle
属性设置为esPickList
,然后使用TValueListEditor.OnGetPickList
事件或TItemProp.PickList
属性根据需要管理ComboBox字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.