リストビュー(TListView)のグループ化を有効にしている時、リストの項目(TListItem)のIndexプロパティはリスト項目の位置を示さないようです。
TListViewの項目(TListItem)のIndexプロパティについて、ヘルプには次のように記載されています。
Index は,リストビュー内の項目を検索することができます。
最初の項目のインデックスは 0,2 番めの項目のインデックスは 1 などとなります。
最初に、リストビューにTListItemのIndexプロパティの値を表示するようにします。
リストビューのOwnerDrawプロパティをtrueに設定して、OnDrawItemを記述します。
void __fastcall TForm1::ListView1DrawItem(TCustomListView *Sender, TListItem *Item,
TRect &Rect, TOwnerDrawState State)
{
ListView1->Canvas->FillRect(Rect);
UnicodeString text = UnicodeString().sprintf(
L"Caption=%s, Index=%d", Item->Caption, Item->Index);
ListView1->Canvas->TextOut(Rect.Left, Rect.Top, text);
}
リストビューのランダムな位置に項目を追加してみます。
//リストビューに項目を追加する
for (int i = 0; i < 10; ++i)
ListView1->Items->Insert(Random(ListView1->Items->Count))->Caption = IntToStr(i);
実行結果で表示されるIndexの値は、上から順番に大きくなっており、TListItemのIndexプロパティがリスト項目の位置を示していることを確認できます。
次に、グループ化を有効にして試してみます。
const int GROUP_SIZE = 3; //グループの数
ListView1->GroupView = true; //リストビューのグループを有効にする
//グループを作成する
for (int i = 0; i < GROUP_SIZE; ++i)
ListView1->Groups->Add()->Header = L"Group" + IntToStr(i);
//リストビューに項目を追加する
for (int i = 0; i < 10; ++i)
{
TListItem* item = ListView1->Items->Insert(Random(ListView1->Items->Count));
item->Caption = IntToStr(i);
item->GroupID = Random(GROUP_SIZE);
}
実行結果で表示されるIndexの値には規則性がなく、ランダムに並んでいます。
リストビュー(TListView)のグループ化を有効にしている時、リストの項目(TListItem)のIndexプロパティはリスト項目の位置を示さないようです。