2010-03-06 22 views
0

我有一個窗體上的TreeView控件。我正在動態地向它添加新的TreeNodes,並且在添加它們之前對它們調用Expand()。這會導致其IsExpanded屬性爲true。然而,在將其添加到TreeView或TreeView上的任何節點後,立即將其IsExpanded屬性設置爲false,並且不會展開任何節點。任何人都可以想出一個想法,爲什麼會這樣?我甚至在添加任何節點之前嘗試在TreeView上調用ExpandAll。這是否有方法被稱爲添加樹節點到TreeView或現有一個孩子後將TreeNode添加到.NET TreeView後,它的IsExpanded屬性變爲false,爲什麼?

回答

1

看來,如果當一個TreeNode被添加到一個TreeView,它沒有分配給它的任何孩子,該節點的IsExpanded屬性設置爲false。因此,使用下面的代碼:

私人無效Form1_Load的(對象發件人, EventArgs的)

{ 
     TreeNode node = new TreeNode(); 
     TreeNode cn1 = new TreeNode(); 
     TreeNode cn2 = new TreeNode(); 
     node.Text = "Hello"; 
     node.Nodes.Add(cn1); 
     node.Nodes.Add(cn2); 
     node.Expand(); 
     treeView1.Nodes.Add(node); 
     bool expanded = node.IsExpanded; 
    } 

我這個樣本中發現,如果有樹節點添加爲孩子,然後IsExpanded財產它被添加到TreeView之前和之後保持真實。因此,請確保添加的節點具有子節點,或者TreeNodeCollection.Add()會將其更改爲摺疊狀態。不知道爲什麼在這一塊,但希望它是有幫助的。

至於ExpandAll(),你一定得把它所有的孩子已被添加之後。我不知道,但我會假設它只是遞歸地遍歷每個節點的節點並調用「expand」,所以如果要擴展的節點尚未添加,它將被此函數忽略。

+0

謝謝你,它解釋了很多。然而這很煩人。我試圖反序列化,我救了,我有那些之前他們的孩子反序列化集裝箱節點樹視圖,這意味着以後我就回去了第二遍再擴大他們加入自己的孩子後? 你還說,我仍然需要調用ExpandAll()?這是爲什麼?不會ExpandAll()展開樹中的每個節點?這似乎無法單獨擴展您想要擴展的那些節點。 – 2010-03-06 13:50:01

0

你應該叫ExpandAll 的TreeView是構建。

+0

不擴展所有的孩子?當我創建它們時,我有一些IsExpanded爲false,有些則爲true。 ExpandAll()會尊重這個嗎?如果是這樣,它會被誤稱。如果不是,那麼我認爲這不能解決我的問題。 – 2010-03-06 13:26:01

相關問題