选中另一个复选框(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;
}
}
当我运行它时,它找不到我要检查的两个节点。提前感谢
正如评论者所指出的,节点很可能缺少一个名称,即字符串索引查找中使用的键。易于实现,因为大多数节点都是在运行时创建的。
添加名称的简单方法:
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;