所以我有这个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;
}
}
当我运行它时,它找不到我要检查的那两个节点。 提前致谢
答案 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;