簡體   English   中英

C#Treeview,如何只檢查一根根線?

[英]C# Treeview, how to keep only one rootline checked?

使用WinForms,桌面應用程序。

選中節點后,我必須取消選中不共享同一根節點的節點。 因此,如果我有5個根,並且有多個子級(深樹),並且檢查了作為根1子級的節點,則需要取消選中2-5根和所有子級。

我真的必須遍歷所有節點才能取消選中它們嗎? 如果我有10個根,每個根有30個以上的孩子,這將變得很沉重?

編輯:所以,我的用例是,我需要能夠選擇所有節點,但只能選擇一個根節點。 對於root,我的意思是第一個節點及其兄弟節點。 因此,如果我檢查位於其他基本根節點中的節點,則所有其他根和子節點均未選中。 一次只能激活一個根。

    1. 小孩1
    2. 小孩2
  1. root2
    1. 小孩3
    2. 小孩4

因此,檢查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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM