2

実行時に Windows フォーム ListView のすべての ListViewGroups をアルファベット順にソートすることは可能ですか?

または、(ListViewGroupCollection の "Insert" メソッドを使用して) グループを追加するときに、並べ替えを手動で実装する必要がありますか? この場合、誰かがこれを行う方法を教えてもらえますか?

4

1 に答える 1

2

WinForms ListView では、並べ替えを手動で行う必要があります。

ListViewGroup[] groups = new ListViewGroup[this.listView1.Groups.Count];

this.listView1.Groups.CopyTo(groups, 0);

Array.Sort(groups, new GroupComparer());

this.listView1.BeginUpdate();
this.listView1.Groups.Clear();
this.listView1.Groups.AddRange(groups);
this.listView1.EndUpdate();

...

class GroupComparer : IComparer
{
    public int Compare(object objA, object objB)
    {
        return ((ListViewGroup)objA).Header.CompareTo(((ListViewGroup)objB).Header);
    }
}

.NET ListView のグループは非常に厄介です。古い Win32 ListView と Windows Explorer が混在しているように見え、動作します...

したがって、すぐにグループの並べ替えをサポートするより良い ListView コンポーネントをお勧めします。

this.betterListView1.Groups.Sort(new GroupComparer());

...

class GroupComparer : IComparer<BetterListViewGroup>
{
    public int Compare(BetterListViewGroup groupA, BetterListViewGroup groupB)
    {
        return groupA.Header.CompareTo(groupB.Header);
    }
}

さらに、グループは Windows エクスプローラーと同じように表示および動作し、折りたたむことができ、並べ替えてもちらつきが発生しません。

于 2012-10-12T11:01:01.880 に答える