簡體   English   中英

可以按類別和AZ分組的ListBox

[英]ListBox with possibility to group by category and A-Z

我有兩個參數列表,您可以在兩個列表之間移動它們(包括或不包括),我想自定義參數的順序以簡化選擇。

我目前正在使用具有多個選擇的ListBox ,但是我希望它具有一個按功能分組,以便按categoryAZ或自定義排序(如propertyGrid進行分組。

是否有可以完成所有這些任務的組件? 我需要在該組件上設置哪些設置?

我將使用像Windows資源管理器視圖中那樣支持組的ListView

檢查這一點: 如何:將Windows窗體ListView控件中的項目分組

簡而言之,您首先創建一個組:

// 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 = new ListViewItemComparer(); // Comparer Class

// 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;
  }
} }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM