如何控制.Net Forms.TreeView中的复选框?

时间:2020-03-05 18:46:20  来源:igfitidea点击:

我有一个.Net桌面应用程序,其中TreeView作为UI元素之一。

我希望能够多选那个TreeView,只有它根本不被支持。

所以我要在树上添加复选框,我的问题是只有一些项目是可选择的,而那些不是可以始终如一地级联选择的。

有什么方法可以在显示其他复选框时禁用或者隐藏它们吗?

解决方案

回答

TreeView的默认行为是,当Checkboxes属性设置为true时,将为所有TreeNode显示该复选框。

我们想要禁用或者隐藏某些复选框的行为是对常规行为的自定义修改。我们可以创建覆盖默认行为的TreeView或者TreeNode的自定义实现。要尝试的另一件事是使用TreeView.StateImageList属性。一些要查看更多信息的网站:

  • 请参阅MSDN论坛上的这篇帖子,该帖子的实现与我们尝试的实现类似。
  • CodeProject:三态TreeView
  • CodeProject:如何在TreeView中处理自定义节点状态图像(例如,三态复选框)

回答

我最近写的一个编辑器中有一个非常类似的问题。最后,我使用了TreeNode的BackColor属性来确定节点的选择状态。然后,我为SelectionChanged事件编写了一个处理程序,该事件检查Shift / Control键的状态,以确定是否将所选节点添加到选择中/从选择中删除或者创建新选择。当前还选择了" Generic :: List <>"节点来消除任何树搜索。

回答

MultiSelectTreeView:

Why doesn't .NET have a multiselect treeview? There are so many uses for one and turning on checkboxes in the treeview is a pretty lousy alternative.