【问题标题】:How do I disable (grey out) the checkboxes in Tri-State Tree View in C#?如何在 C# 中禁用(灰显)三态树视图中的复选框?
【发布时间】:2013-03-20 15:15:50
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 你不能在选定的节点上设置特定的复选框吗..?

标签: c# winforms checkbox treeview


【解决方案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出现在节点上时,你需要改变TreeNode属性的StateImageIndex,像这样myNode.StateImageIndex = (int)CheckedState.CheckedDisabled;

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-11
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-29
    • 1970-01-01
    相关资源
    最近更新 更多