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