2010-02-09 69 views
0

你好,我有复选框TreeView控件:禁用某些节点

复选框LEVEL1

checkbox Child1 
    checkbox Child2 

复选框LEVEL2

checkbox Child1 

我shloul不允许检查和CHILD2的取消选中1级和1级2级?

这是可能的树视图控制?

回答

1

的问题是,一个TreeNode没有启用状态或任何您可以询问的事件。因此,要模拟Enabled状态,您可以使用Tag属性并在创建每个节点时在其中保存一个布尔值。

然后你的事件添加到TreeView.BeforeCheck和实施某种这样的:

void TreeView_BeforeCheck(object sender, TreeViewCancelEventArgs e) 
{ 
    var IsReadOnly = e.Node.Tag as bool?; 

    if (IsReadOnly != null) 
    { 
     e.Cancel = IsReadOnly.Value; 
    } 
} 
+0

是的,在检查之前。逻辑可能不需要标签。 – 2010-02-09 10:53:25

+0

事实上,上述逻辑不需要标签。但是为了在每个BeforeCheck事件中让它更简单(更快),我将确定节点在创建节点时是否可检查,然后检查BeforeCheck的结果(如果这不可能考虑另一个缓存解决方案) – Oliver 2010-02-09 11:41:51

0

据我所知,这是不可能的。但是你可以自己效仿:

改变节点颜色为灰色:

treeControl.Nodes[0].ForeColor = Color.Gray; 

,赶上click事件:

private void treeControl_AfterCheck(TreeControl tc, 
              NodeEventArgs e) 
{ 
    if(e.Node.ForeColor == Color.Gray) 
    e.Node.Checked = !e.Node.Checked; 
} 
+0

我不认为这是一个很好的办法。为什么要依赖于颜色? – Slavo 2010-02-09 09:48:23

+0

嗯,我想这是我会遵循的一种方法。确实是一个很好的建议!谢谢卡拉。 齐射,我不会依赖于颜色...会检查另一个变量! 感谢您的解决方法。 – siva 2010-02-09 10:11:04

+0

这只是一般的想法。您可以使用node.Tag或保留禁用节点的列表。 – Carra 2010-02-09 10:15:28