C# 列表框,可按类别和A-Z进行分组

C# 列表框,可按类别和A-Z进行分组,c#,.net,winforms,C#,.net,Winforms,我有两个参数列表,您可以在这两个参数之间移动它们(包括或不包括),我希望自定义参数的顺序以简化选择 我目前正在使用一个具有多个选择的列表框,但我希望它有一个按功能分组,按类别,a-Z,或者像属性网格那样的自定义排序 是否有一个组件可以实现所有这些功能?我需要在该组件上设置什么设置?我会使用一个支持组的列表视图,就像在Windows资源管理器视图中一样 勾选这个: 简而言之,您首先创建一个组: // Adds a new group that has a left-aligned header l

我有两个参数列表,您可以在这两个参数之间移动它们(包括或不包括),我希望自定义参数的顺序以简化选择

我目前正在使用一个具有多个选择的
列表框
,但我希望它有一个按功能分组,按
类别
a-Z
,或者像
属性网格
那样的自定义排序


是否有一个组件可以实现所有这些功能?我需要在该组件上设置什么设置?

我会使用一个支持组的列表视图,就像在Windows资源管理器视图中一样

勾选这个:

简而言之,您首先创建一个组:

// Adds a new group that has a left-aligned header
listView1.Groups.Add(new ListViewGroup("List item text",
    HorizontalAlignment.Left));
然后将项目添加到组中,例如,此处将项目0添加到组中:

// Adds the first item to the first group
listView1.Items[0].Group = listView1.Groups[0];

如果您决定使用ListView,这里有一个使用基于列排序的解决方案。我在继承ListView的组件中使用它

private ListViewItemComparer LviComparer=新建ListViewItemComparer();//比较器类

// Override OnColumn Click
protected override void OnColumnClick(ColumnClickEventArgs e)
{
  if (e.Column == LviComparer.SortColumn)
  {
    if (LviComparer.Order == SortOrder.Ascending)
    {
      LviComparer.Order = SortOrder.Descending;
    }
    else
    {
      LviComparer.Order = SortOrder.Ascending;
    }
  }
  else
  {
    LviComparer.SortColumn = e.Column;
    LviComparer.Order = SortOrder.Ascending;
  }
  this.Sort();
  base.OnColumnClick(e);
}
//比较类

 public class ListViewItemComparer : IComparer  {
  public int SortColumn  {  get ; private set ; }
  public SortOrder Order {  get ; private set ; }
  private CaseInsensitiveComparer objectCompare = new CaseInsensitiveComparer();
  public int Compare(object x, object y)
  {
    int compResult = 0;
    ListViewItem lviX, lviY;
    lviX = (ListViewItem)x;
    lviY = (ListViewItem)y;
    compResult = CompareString(lviX, lviY);
            if (Order == SortOrder.Ascending)
    {
      return compResult;
    }
            else if (Order == SortOrder.Descending)
    {
      return (-compResult);
    }
    else
    {
      return 0;
    }
  }
private int CompareString(ListViewItem lviX, ListViewItem lviY)
{
  try
  {
            int compareResult = objectCompare.Compare(lviX.SubItems[SortColumn].Text, lviY.SubItems[SortColumn].Text);
    return compareResult;
  }
  catch (IndexOutOfRangeException ex)
  {
    Console.WriteLine(ex.Message);
    return 0;
  }
} }

设置为查看详细信息并添加一列。启用和禁用
ShowGroups
,在两种模式之间切换。