选中另一个复选框(TreeView)后再选中复选框

本文关键字:复选框 另一个 TreeView | 更新日期: 2023-09-27 18:28:44

所以我有这个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;
        }
    }

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

选中另一个复选框(TreeView)后再选中复选框

正如评论者所指出的,节点很可能缺少一个名称,即字符串索引查找中使用的。易于实现,因为大多数节点都是在运行时创建的。

添加名称的简单方法:

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;