在您的情况下,没有简单/快速的方法,因为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;
更复杂的部分将是逻辑的实现。唯一覆盖来自的TriStateTreeView
五个事件Windows.Forms.TreeView
,您将需要更改它们以处理您的新功能。您可能必须在顶部添加类似这样的内容:
if(e.Node.StateImageIndex == (int)CheckedState.CheckedDisabled || ... ) return;
但在每种情况下可能都不是那么简单,因此请确保检查每种方法。