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