如何在C#中的三态树视图中禁用(灰显)复选框?

时间:2013-03-19 19:35:18

标签: c# winforms checkbox treeview

我正在使用继承自TreeView的三态树视图。

http://www.codeproject.com/Articles/202435/Tri-State-Tree-View

我很清楚如何使文字变灰: TreeView with multi-color TreeNode text

使用描述的事件处理程序,我可以轻松更改ri-State树状视图中特定项目的文本颜色。但是,如何在三态树视图中更改特定复选框的颜色,使其看起来像灰色/禁用?

请注意我从代码项目中使用树视图,而不是一般的TreeVieuw: Disable and grey out a check box of treenode

1 个答案:

答案 0 :(得分:1)

在您的情况下,没有简单/快捷的方式,因为TreeNode没有Enabled属性。您必须自己添加此功能。我看了TriStateTreeView代码,我可以发表一些评论来帮助你。

绘图部分很简单,您可以在构造函数中找到:

case 0: CheckBoxRenderer.DrawCheckBox(chkGraphics, new Point(0, 1), CheckBoxState.UncheckedNormal);
break;
case 1: CheckBoxRenderer.DrawCheckBox(chkGraphics, new Point(0, 1), CheckBoxState.CheckedNormal);
break;
case 2: CheckBoxRenderer.DrawCheckBox(chkGraphics, new Point(0, 1), CheckBoxState.MixedNormal);
break;

此部分填充将存储每个可能状态的位图的StateImageList。您需要添加System.Windows.Forms.VisualStyles中已存在的其他三张图片:CheckBoxState.UncheckedDisabledCheckBoxState.CheckedDisabledCheckBoxState.MixedDisabled

然后,当您想要影响节点的CheckedDisabled外观时,您需要更改StateImageIndex属性的TreeNode,例如myNode.StateImageIndex = (int)CheckedState.CheckedDisabled; < / p>

更复杂的部分将是逻辑的实现。 TriStateTreeView仅覆盖Windows.Forms.TreeView中的五个事件,您需要更改它们以处理新的功能。你可能需要在顶部添加这样的东西: if(e.Node.StateImageIndex == (int)CheckedState.CheckedDisabled || ... ) return;但在每种情况下都可能不那么简单,所以请务必检查每种方法。