2012-03-22 117 views
0

所以我有这个TreeView有3个父节点,每个都有一些孩子。有一个特定的孩子在同一父节点上依赖于其他两个孩子。以下是我所做的代码:检查一个复选框后检查另一个(TreeView)

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; 
     } 
    } 

当我运行它时,它找不到要检查的那两个节点。 在此先感谢

+0

你是什么意思没有找到? – gbianchi 2012-03-22 12:42:28

+1

在你的if中设置一个断点,你会看到你的节点是否有你正在寻找的KEY或者它是否在文本中。此外,也许你可以让你的代码更少依赖字符串。 – 2012-03-22 12:44:30

+0

您可能忘记设置TreeNode.Name属性。 – 2012-03-22 13:27:18

回答

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条件让您在较少依赖文本属性,它应该仅用于显示目的:

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;