在ListView中,項目按組「BGroup」,「CGroup」和「DGroup」分組(這些是組標題)。現在,當我向ListView添加一個新項目併爲此項目分配一個頭部爲「AGroup」的新組時,組「AGroup」總是插入到組的末尾;所以新的組的順序是:BGroup,CGroup,DGroup,AGroup。那麼我怎樣才能讓這些組按正確的字母順序排序呢?順序應該是:AGroup,BGroup,CGroup,DGroup。排序ListView組?
5
A
回答
8
您可以使用此宏例如ListView_SortGroups
。這個宏期望你有自己的比較函數,由LVGroupCompare
函數原型定義。在下面的代碼中,通過使用CompareText
函數,這些組按Header
屬性排序,但現在讓您可以構建自己的比較。
忘記了;不管你傳遞給ListView_SortGroups
宏的最後一個Pointer
類型參數,你會在pvData
參數中的LVGroupCompare
函數中收到,因此這將成爲某個列表視圖的組排序功能,所以最好直接傳遞Groups
收集該列表視圖以便於操作。
由於沒有直接的方法來查找組ID列表視圖組,我會使用下面的輔助函數了TListGroups
類:
type
TListGroups = class(ComCtrls.TListGroups)
public
function FindItemByGroupID(GroupID: Integer): TListGroup;
end;
implementation
function TListGroups.FindItemByGroupID(GroupID: Integer): TListGroup;
var
I: Integer;
begin
for I := 0 to Count - 1 do
begin
Result := Items[I];
if Result.GroupID = GroupID then
Exit;
end;
Result := nil;
end;
然後你就可以在LVGroupCompare
使用此helper方法函數回調這種方式:
function LVGroupCompare(Group1_ID, Group2_ID: Integer;
pvData: Pointer): Integer; stdcall;
var
Item1: TListGroup;
Item2: TListGroup;
Groups: TListGroups;
begin
Result := 0;
Groups := TListGroups(pvData);
Item1 := Groups.FindItemByGroupID(Group1_ID);
Item2 := Groups.FindItemByGroupID(Group2_ID);
if Assigned(Item1) and Assigned(Item2) then
Result := CompareText(Item1.Header, Item2.Header);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Item: TListItem;
Group: TListGroup;
begin
Group := ListView1.Groups.Add;
Group.Header := 'AGroup';
Item := ListView1.Items.Add;
Item.Caption := 'Item X';
Item.GroupID := Group.ID;
ListView_SortGroups(ListView1.Handle, LVGroupCompare, ListView1.Groups);
end;
相關問題
- 1. WPF ListView組和排序
- 2. 在排序時排除ListView組
- 3. 排序在ListView
- 4. ListView排序
- 5. JavaFX排序ListView
- 6. Android CustomAdapter ListView排序
- 7. ListView項目排序?
- 8. Listview按列排序
- 9. ListView DataBind排序值
- 10. 在javascript中排序listview
- 11. asp.net ListView按列排序
- 12. ListView按錯誤列排序
- 13. 排序ListView控件在WPF
- 14. asp.net ListView排序箭頭
- 15. Android ListView - 刷新和排序?
- 16. Android ListView排序問題
- 17. 按日期排序ListView
- 18. CheckedTextView ListView的頁眉 - 排序
- 19. 排序和交替的ListView
- 20. 如何按列排序ListView?
- 21. ListView排序在Android中
- 22. 如何更快排序ListView?
- 23. 在ListView中排序子項
- 24. 奇怪的ListView排序
- 25. 的ListView閃爍時排序
- 26. 的Android排序的ListView
- 27. 按組排序/排序按
- 28. 排序數組排序
- 29. asp.net ListView按數字順序排序
- 30. 如何按升序排序ListView項目?
謝謝。但是,編譯器在'ListView_SortGroups'行顯示錯誤: 'E2009不兼容類型:'常規過程和方法指針' 但是,當我在「LVGroupCompare」之前添加「@」@「LVGroupCompare」時,編譯器在同一行顯示錯誤: 'E2036需要變量' – user1580348 2013-02-23 15:34:15
你有'LVGroupCompare'定義爲一個常規程序(我有)?它不能是一種方法,不應該嵌套。我已經用Delphi 2009測試過了(因爲我現在手頭沒有Delphi XE2),編譯器很滿意。 – TLama 2013-02-23 15:44:16
xe2沒有問題 – 2013-02-23 15:59:36