我正在使用继承自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
答案 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.UncheckedDisabled
,CheckBoxState.CheckedDisabled
和CheckBoxState.MixedDisabled
。
然后,当您想要影响节点的CheckedDisabled
外观时,您需要更改StateImageIndex
属性的TreeNode
,例如myNode.StateImageIndex = (int)CheckedState.CheckedDisabled;
< / p>
更复杂的部分将是逻辑的实现。 TriStateTreeView
仅覆盖Windows.Forms.TreeView
中的五个事件,您需要更改它们以处理新的功能。你可能需要在顶部添加这样的东西:
if(e.Node.StateImageIndex == (int)CheckedState.CheckedDisabled || ... ) return;
但在每种情况下都可能不那么简单,所以请务必检查每种方法。