1

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

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

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

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

请注意,我使用的是代码项目中的树视图,而不是一般的 TreeView: 禁用并显示树节点的复选框

4

1 回答 1

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.CheckedDisabled和中的其他三张图片CheckBoxState.MixedDisabled

然后,当您想影响例如节点的外观CheckedDisabled时,您将需要更改属性,如下所示StateImageIndexTreeNodemyNode.StateImageIndex = (int)CheckedState.CheckedDisabled;

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

于 2013-03-20T07:15:50.123 回答