0
我得到了这个树视图,我让它选择所有的孩子,如果父母被选中,回来的路上。还有另一个规则来检查一些受抚养的孩子。问题是:我想检查父母是否有任何孩子被选中,但是因为那些其他规则我找不到这样做的方式没有规则会发生冲突。所以这里是我的代码做了到现在为止:提前检查父母如果孩子检查
private void tvMorgan_AfterCheck(object sender, TreeViewEventArgs e)
{
//Check Children if parent checked
if (e.Node.Nodes.Count > 0)
{
TreeNode tnParent = e.Node;
if (tnParent.Checked)
{
foreach (TreeNode tnChild in tnParent.Nodes)
{
tnChild.Checked = true;
}
}
//Unchecked children if parent unchecked
else
{
foreach (TreeNode tnChild in tnParent.Nodes)
{
tnChild.Checked = false;
}
}
}
//If dependent node is selected, check the other two
else if (((e.Node.Text.Contains("BRL/EUR")) && (e.Node.Checked)) && (e.Node.Parent.Text.Contains("FWD")))
{
TreeNode tnParent = e.Node.Parent;
foreach (TreeNode tn in tnParent.Nodes)
{
if (tn.Text.Contains("BRL/USD") || tn.Text.Contains("EUR/USD"))
tn.Checked = true;
}
}
//If one of the two necessary nodes are uncheked, then uncheck the dependent one
else if ((((e.Node.Text.Contains("BRL/USD")) || (e.Node.Text.Contains("EUR/USD"))) && (!e.Node.Checked)) && (e.Node.Parent.Text.Contains("FWD")))
{
TreeNode tnParent = e.Node.Parent;
foreach (TreeNode tn in tnParent.Nodes)
{
if (tn.Text.Contains("BRL/EUR"))
tn.Checked = false;
}
}
}
感谢
是,如果你要好得多可以提供您的代码的一个减少版本隔离问题。代替我会提到你可能想要在方法开始时禁用事件处理程序AfterCheck,并在最后重新启用它。这将禁用当前方法的递归方面。 – Slugart 2012-03-22 19:24:47
另外,我会将父子自动选择的逻辑(根据问题)从更硬的编码规则中分离出来 – payo 2012-03-22 19:26:09