1

2列のリストビューを作成したい。最初の列には行番号を指定し、2 番目の列にはコンボボックスを含める必要があります。次のコードを書きますが、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

を の子コントロールとしてTComboBox実際に設定していないため、 は表示されません。ポインタを に関連付けられたユーザー定義の値として保存しただけです。これは UI に影響を与えないため、削除します。TComboBoxTListViewTComboBoxTListItem

for (int i = 0; i < 10; i++)
{
    TListItem *items = ListView1->Items->Add();
    items->Caption = IntToStr(i);
    items->SubItems->Add("combo"+IntToStr(i));
}

TComboBoxの内部を実際に表示するには、 をのとしてTListView割り当て、表示する必要があるときはいつでもメソッドを使用して の位置とサイズを調整する必要があります。TListViewParentTComboBoxSetBounds()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使用して ComboBox 文字列を管理します。TValueListEditor.OnGetPickListTItemProp.PickList

于 2013-02-04T11:09:20.390 に答える