繁体   English   中英

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

[英]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指定为TComboBoxParent ,然后使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM