我想要未經檢查的子節點,如果父節點未檢查。根據我的代碼,如果我檢查了一個子節點父節點得到選定。這是寫入方式,但是當我未選中父節點時,子節點仍然保持檢查狀態。我在AfterCheck事件中完成了以下代碼。如果父節點未選中,如何取消選中子節點?
private bool updatingTreeView;
private void treSelector_AfterCheck(object sender, TreeViewEventArgs e)
{
if (updatingTreeView) return;
updatingTreeView = true;
SelectParents(e.Node, e.Node.Checked);
updatingTreeView = false;
}
private void SelectParents(TreeNode node, Boolean isChecked)
{
var parent = node.Parent;
if (parent == null)
{
//CheckAllChildren(treSelector.Nodes, false);
return;
}
if (isChecked)
{
parent.Checked = true; // we should always check parent
SelectParents(parent, true);
}
else
{
if (parent.Nodes.Cast<TreeNode>().Any(n => n.Checked))
return; // do not uncheck parent if there other checked nodes
SelectParents(parent, false);
}
}
如何解決這個問題?
你看過所有可用的事件,並調查每個人做的事情嗎?例如'TreeView AfterCheck事件'?如果你花時間滾動到頁面的右側,你會看到 – MethodMan
這個代碼是向後做的,你想迭代子節點和注意父節點。請謹防TreeView中的[錯誤](http://stackoverflow.com/questions/3174412/winforms-treeview-recursively-check-child-nodes-problem/3174824#3174824),當您點擊太快時,使它變得不可靠。 –