実行時に Windows フォーム ListView のすべての ListViewGroups をアルファベット順にソートすることは可能ですか?
または、(ListViewGroupCollection の "Insert" メソッドを使用して) グループを追加するときに、並べ替えを手動で実装する必要がありますか? この場合、誰かがこれを行う方法を教えてもらえますか?
実行時に Windows フォーム ListView のすべての ListViewGroups をアルファベット順にソートすることは可能ですか?
または、(ListViewGroupCollection の "Insert" メソッドを使用して) グループを追加するときに、並べ替えを手動で実装する必要がありますか? この場合、誰かがこれを行う方法を教えてもらえますか?
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 エクスプローラーと同じように表示および動作し、折りたたむことができ、並べ替えてもちらつきが発生しません。