如何对checklistbox进行排序

本文关键字:排序 checklistbox | 更新日期: 2023-09-27 18:15:28

我有一个CheckedListBox看起来像这样:

    水果
  • 香蕉
  • ,
  • 苹果
  • ,
  • 国家
  • 汽车
  • , 马鲁蒂
  • 丰田
  • ,
  • 飞机
  • 动物

虽然斜体不是子节点,但被认为是父节点的子节点。如。香蕉,苹果是水果的孩子,所以他们在一起等。

直接排序不起作用,因为它不会将子节点与其父节点保持排序。我必须以这样一种方式对它进行排序,即子节点与它们各自的父节点保持在一起,父节点被排序,每个父节点中的子节点也是如此。

例如

。o/p应该是

    动物
  • 汽车
  • , 马鲁蒂
  • 丰田
  • ,
  • 国家
  • 水果
  • 苹果
  • ,
  • 香蕉
  • ,
  • 飞机

如何对checklistbox进行排序

你可以制作一个List其中每个父字符串不变,每个子字符串都以父字符串作为前缀。

    水果
  • 水果香蕉
  • 水果苹果
  • 国家
  • 汽车
  • 汽车马鲁蒂
  • 汽车丰田
  • 飞机

排序后(按字母顺序),父级将被排序到子级前面。然后重建CheckedListBox。

列表

如果有潜在的歧义,你可能想使用不同的分隔符,一些没有使用的字符。

正如评论中所指出的,您可能可以使用树状视图来更好地显示这种关系。您可以在树视图的节点上放置复选框排序将更加隐式地显示您正在执行的操作,并且它们之间的关系将更加明显。

然而

。如果你确实希望为你的CheckedListBox使用自定义排序,你可能必须创建你自己的控件派生自CheckedListBox,并覆盖"Sort"方法来提供你自己的排序方法。

// This class inherits from CheckedListBoxand implements a different  
// sorting method. 
public class SortSpecialCheckedListBox:
    CheckedListBox
{
    public SortSpecialCheckedListBox() : base()
    {        
    }
    // Overrides the parent class Sort to perform the specialised sorting
    // behaviour you are interested in
    protected override void Sort()
    {
        // Do your specialised sort here.
    }
}