检查另一个后检查复选框(TreeView)

时间:2012-03-22 12:39:53

标签: c# treeview

所以我有这个TreeView有3个父节点,每个节点都有一些孩子。有一个特定的孩子依赖于同一父节点中的其他两个孩子。这是我完成的代码:

private void tvMorgan_AfterCheck(object sender, TreeViewEventArgs e)
    {
        if ((e.Node.Text.Contains("BRL/EUR")) && (e.Node.Parent.Text.Contains("FWD")))
        {
            TreeNode tnParent = e.Node.Parent;
            tnParent.Nodes["BRL/USD"].Checked = true;
            tnParent.Nodes["EUR/USD"].Checked = true;
        }
    }

当我运行它时,它找不到我要检查的那两个节点。 提前致谢

1 个答案:

答案 0 :(得分:0)

正如评论员指出的那样,您的节点很可能缺少一个名称,即字符串索引查找中使用的。很容易发生,因为大多数节点都是在运行时创建的。

添加名称的简单方法:

myParent.Nodes.Add(new TreeNode("BRL/USD") { Name = "BRL/USD" });
myParent.Nodes.Add(new TreeNode("EUR/USD") { Name = "EUR/USD" });

然后你的代码应该有效:

if (tnParent.Nodes.ContainsKey("EUR/USD"))
  tnParent.Nodes["EUR/USD"].Checked = true;

你可能应该在if条件下使用相同的逻辑,这样你就不太依赖text属性了,它实际上只应该用于显示目的:

if ((e.Node.Name == "BRL/EUR") ...

如果没有设置名称,那么您必须自己搜索节点树以找到“文本”:

TreeNode found = tnParent.Nodes.OfType<TreeNode>().Where(x => x.Text.Contains("EUR/USD")).First();
if (found != null)
  found.Checked = true;