我有两个treeview
,其中有一些节点,使用所需的命令后面有复选框。现在我想让一些节点变灰/变形。为此,我从第一个树视图中选择一个节点,然后在另一个树视图中从node.Text
与其文本不相等的所有节点都是灰色的。我是通过以下功能完成的:
public void deactive_checkboxs(object sender, EventArgs e)
{
TreeNodeCollection nodes_checked1 = treeView1.Nodes[0].LastNode.Nodes;
TreeNodeCollection nodes_checked2 = treeView2.Nodes[0].LastNode.Nodes;
foreach (TreeNode node1 in nodes_checked1)
{
if (node1.Checked)
{
foreach (TreeNode node2 in nodes_checked2)
{
if (node1.Text.Equals(node2.Text))
{
node2.Checked = false;
}
else
{
node2.Checked = false;
}
}
}
}
}
当然这不是灰色节点而是删除节点后面的复选框(如果你让我知道制作灰色方法,我会非常感激)。
现在我不知道我应该把这个函数放在哪里才能对代码产生影响。有人帮帮我吗?
答案 0 :(得分:1)
仅通过设置属性就无法做到这一点。
您既不能停用单个Node
也不能删除其CheckBox
。
以下是您可以做的事情:
ForeColor
的{{1}} Node
的{{1}}状态以下是一个例子:
Checked
启用/禁用Node
最佳使用功能:
treeView1.CheckBoxes = true;
TreeNode tn = new TreeNode("Node 1");
TreeNode tn1 = new TreeNode("Node 11");
TreeNode tn2 = new TreeNode("Node 12");
tn1.Checked = true;
tn2.Checked = true;
tn.Nodes.Add(tn1);
tn.Nodes.Add(tn2);
treeView1.Nodes.Add(tn);
// gray text:
tn2.ForeColor = Color.Gray;
// mark one node somehow:
tn2.Tag = "X";
// cancel changes for marked node:
treeView1.BeforeCheck += (s, e)
=> { if (e.Node.Tag != null && e.Node.Tag.ToString() == "X") e.Cancel = true; };
要禁用Node
外观,您必须自己所有者绘制节点。这是相当多的额外代码..
首先做一些准备工作:
void SetNode(TreeNode node, bool enabled)
{
node.ForeColor = enabled ? SystemColors.ControlText : Color.Gray;
node.Tag = enabled ? null : "X";
}
现在实际绘制节点:
CheckBox