ListViewでは、項目はグループ "BGroup"、 "CGroup"、 "DGroup"(これらはグループヘッダー)でグループ化されます。今、私はListViewに新しい項目を追加し、この項目に "AGroup"というヘッダーを持つ新しいグループを割り当てると、グループ "AGroup"は常にグループの最後に挿入されます。新しいグループの順序は、BGroup、CGroup、DGroup、AGroupです。では、どのようにグループを正しいアルファベット順にソートすることができますか?順序は、AGroup、BGroup、CGroup、DGroupでなければなりません。ListViewグループをソートする?
5
A
答えて
8
これにはListView_SortGroups
マクロを使用できます。このマクロは、LVGroupCompare
関数プロトタイプで定義された独自の比較関数を持つことを期待しています。次のコードでは、グループはHeader
というプロパティでソートされていますが、今度は独自の比較を作成します。
メモを忘れました。 pvData
パラメータのLVGroupCompare
ファンクションで受け取るListView_SortGroups
マクロの最後のPointer
型パラメータに渡すものなので、これは特定のリストビューのグループソート関数になるため、直接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
で、このヘルパーメソッドを使用することができますこのようにして関数コールバック:
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. MYSQLグループ内の項目をソートしてグループをソートする
- 2. ListView Itemsソート?
- 3. グループ化ListView WPF
- 4. ソートListView by Stringアイテム
- 5. グループのソート、ソート、ソートの値をマップする方法
- 6. グループ、ソートのLINQ
- 7. Delphi - xml - listviewとグループ
- 8. ASP.Netの行をグループ化するListView
- 9. ListViewでソートする方法は?
- 10. listview C#特定の列でソートする
- 11. ListViewソートの処理方法
- 12. Javaでarraylistをグループ化しソートする
- 13. グループ化された列をソートする
- 14. UWP ListViewグループを1つのグループにまとめてグループ化する
- 15. ASP.NET ListView交互のグループ
- 16. ListViewのMVVMグループ化アイテム
- 17. グループのキー内でソートする
- 18. データのグループ化とソートR
- 19. UWP ObservableCollectionのソートとグループ化
- 20. MS ACCESSグループ/ソート順に
- 21. MongoDBグループとソート文書
- 22. グループ内のデータのソート
- 23. Pyspark groupbyグループ内でソート
- 24. MySQLグループ化ソートの問題
- 25. ListViewでGroupNameを取得するWPFでグループ化する
- 26. パンダのグループ内の列をソート
- 27. グループ化されたListViewのグループヘッダーを非表示にする
- 28. C#ウィンドウのListViewにグループとアイテムを追加する
- 29. Expandable ListView年/月単位で項目をグループ化する
- 30. グループ内の空白の項目を表示するListView
ありがとう。私は 『LVGroupCompare』の前に 『@』を追加したときに「正規の手順と方法pointer' :しかし 'E2009互換性のない型:しかし、コンパイラは' ListView_SortGroups'ラインでのエラーを示して 'LVGroupCompare' @、コンパイラは同じ行にエラーを表示します: 'E2036変数が必要です ' – user1580348
そして' LVGroupCompare'は通常のプロシージャとして定義されていますか?それはメソッドにすることはできませんし、ネストするべきではありません。私はコンパイラが満足していたDelphi 2009(これは手作業でDelphi XE2を使用していないため)でこれをテストしました。 – TLama
xe2に問題なし –