2011-11-18 70 views
1

我有兩個參數列表,您可以在兩個列表中移動它們(包含或不包含),我想自定義參數的順序以簡化選擇。列表框有可能性按類別和A-Z

我目前使用的與多選一ListBox,但我想它通過categoryA-Z或自定義排序像propertyGrid有一組由功能組。

有沒有可以做所有這些的組件?我需要在該組件上設置哪些設置?

回答

2

我會用一個ListView,它支持像在Windows資源管理器視圖中一樣的組。

檢查這一項:How to: Group Items in a Windows Forms ListView Control

因此,在短期,首先創建一個組:

// 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]; 
+0

你如何上下滾動,而不是左,右? –

+0

設置爲「查看」詳細信息並添加一列。啓用和禁用'ShowGroups'以在兩種模式之間切換。 –

1

如果您決定使用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; 
    } 
} }