2010-05-30 3 views

ответ

4

Возможно, это самый простой способ.

procedure TForm1.Click(Sender: TObject); 
begin 
    ShowMessage(IntToStr(GetNumItemsInGroup(1))); 
end; 

function TForm1.GetNumItemsInGroup(const GroupID: integer): integer; 
var 
    i: Integer; 
begin 
    result := 0; 
    assert((GroupID >= 0) and (GroupID <= ListView1.Groups.Count - 1)); 
    for i := 0 to ListView1.Items.Count - 1 do 
    if ListView1.Items.Item[i].GroupID = GroupID then 
     inc(result); 
end; 
+0

Thank-you .. это работает красиво. – Bill

1

В Vista и более поздних, в LVM_GETGROUPINFO и LVM_GETGROUPINFOBYINDEX сообщения возвращают структуру LVGROUP, которая имеет cItems элемент, указывающий количество элементов в группе.

+0

Это гораздо лучшее решение. В частности, он, вероятно, намного быстрее в очень больших списках. Однако, по моему опыту, группы просмотра списков вообще не работают хорошо с большими объемами данных, поэтому эта разница может не иметь большого значения на практике ... –

Смежные вопросы