[英]C# Treeview, how to keep only one rootline checked?
使用WinForms,桌面應用程序。
選中節點后,我必須取消選中不共享同一根節點的節點。 因此,如果我有5個根,並且有多個子級(深樹),並且檢查了作為根1子級的節點,則需要取消選中2-5根和所有子級。
我真的必須遍歷所有節點才能取消選中它們嗎? 如果我有10個根,每個根有30個以上的孩子,這將變得很沉重?
編輯:所以,我的用例是,我需要能夠選擇所有節點,但只能選擇一個根節點。 對於root,我的意思是第一個節點及其兄弟節點。 因此,如果我檢查位於其他基本根節點中的節點,則所有其他根和子節點均未選中。 一次只能激活一個根。
因此,檢查child4,取消選中root,child1和child2
使用遞歸(訪問樹節點的自然方法)時,它永遠不會“繁重”。 您只需迭代選中節點的兄弟姐妹,然后遞歸訪問其子節點,然后也取消選中它們。 像這樣:
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e) {
if (e.Node.Checked) {
for (var node = e.Node.PrevNode; node != null; node = node.PrevNode) uncheckTree(node);
for (var node = e.Node.NextNode; node != null; node = node.NextNode) uncheckTree(node);
}
}
private void uncheckTree(TreeNode node) {
node.Checked = false;
foreach (TreeNode child in node.Nodes) uncheckTree(child);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.