【问题标题】:How to sort a CheckedListBox如何对 CheckedListBox 进行排序
【发布时间】:2014-07-29 10:56:39
【问题描述】:

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

  • 水果
  • .....香蕉
  • .....苹果
  • 国家/地区
  • 汽车
  • .....马鲁蒂
  • .....丰田
  • 飞机
  • 学生
  • 动物

虽然斜体实际上不是子节点,但被视为父节点的子节点。例如。 Banana & Apple 是 Fruits 的孩子,所以他们一起去等等。

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

例如。 o/p 应该是

  • 动物
  • 汽车
  • .....马鲁蒂
  • .....丰田
  • 国家/地区
  • 水果
  • .....苹果
  • .....香蕉
  • 飞机
  • 学生

【问题讨论】:

  • CheckedListBox 提供了列表形式的复选框选项,treeview 跟我需要的完全不一样。
  • 我不知道你的评论是什么意思? TreeViewprovides checkboxes 如果您对此感兴趣。
  • 项目(大型项目)已经完成,CheckedListBox 上存在很多依赖项。所以我必须只对此应用排序。有没有可能??
  • @SriramSakthivel 我认为他正在做一个预制项目,作为维护工作,他必须应用排序。

标签: c# .net winforms sorting checkedlistbox


【解决方案1】:

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

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

在您对此进行排序(按字母顺序)后,父级将被排序为正好在子级之前。然后从排序的 List 重建 CheckedListBox.Items。

如果存在潜在的歧义,您可能希望使用不同的分隔符,否则不使用某些字符。

【讨论】:

  • 好建议!!非常感谢!!会试一试的!
【解决方案2】:

如评论中所述,您可能可以使用树视图更好地显示这种关系。 You can put check boxes on nodes in a treeview 然后,排序会更加隐含,并且关系会更加明显。

但是。 如果您确实希望对 CheckedListBox 使用自定义排序,您可能必须创建自己的控件 Derived from CheckedListBox,以及 override the "Sort" Method to provide your own sorting methodology.

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-19
    • 2011-11-09
    • 2014-04-18
    • 2016-05-17
    • 2016-11-24
    相关资源
    最近更新 更多