2012-09-06 32 views
4

我在解決這個問題有什麼問題。我一直在搜索,並沒有找到這個問題的很多解決方案。我發現的唯一「解決方案」是一個破解,然後崩潰最後一個節點。在winform中部分切斷節點TreeView

this.Nodes[this.Nodes.Count - 1].Expand(); 
this.Nodes[this.Nodes.Count - 1].Collapse(); 

你可以從這個屏幕上看到拍攝的最後一個節點被部分切斷,只有這樣,才能揭露它是擴大這將導致TreeView的正確重新呈現自身的節點。

enter image description here

我務實添加節點到TreeView。我不知道這是否會影響結果,但是我已經將TreeView擴展到了我自己的類中,因此我可以添加一些屬性和方法。

public class MyTreeView : TreeView 
{ 

public void BuildTree() 
{ 
    this.Nodes.Clear(); 
    foreach (TestSetFolder folder in Folders) 
    { 
     MyTreeNode node = new MyTreeNode(); 
     node.Name = folder.Name; 
     node.Text = folder.Name; 
     node.Tag = folder; 
     node.FolderID = folder.NodeID; 
     node.IsPopulated = false; 

     this.Nodes.Add(node); 
    } 
} 
} 

這就是我如何將節點添加到列表中。有沒有人有這個問題的乾淨解決方案?

+1

Upvoted讓你可以上傳你的圖片.. – stuartd

+0

謝謝。我已經添加了圖像! – Smeiff

回答

6

使用treeView.BeginUpdate()treeView.EndUpdate()之前任何視覺上的變化後:試試這個:

 TreeNode rootNode = treeView1.Nodes[0]; 
     TreeNode lastNode = rootNode.Nodes[rootNode.Nodes.Count - 1]; 
     lastNode.EnsureVisible(); 

或者使用來自MSDN文章的例子中得到的最後一個節點。

SuspendLayout()和ResumeLayout()也很有用!

如果您想更新UI,請不要一次添加所有節點!逐個添加,夾在begin和endupdate調用之間。

+2

謝謝!這工作。樹正在構建時,我的UI不再更新,但樹現在看起來正確。 – Smeiff

0
+0

在我原來的問題中,我說過我已經使用了expand,接着是collapse,這解決了我的問題。這不是我正在尋找的解決方案。我想知道爲什麼該項目首先被切斷。我不想進行展開,摺疊的原因是因爲在展開時,它會查詢該節點內的內容的API。我這樣做,以節省初始加載時間,否則負載將永遠 – Smeiff

1

您可以調用的問題上EnsureVisible的TreeViewNode,就像這樣:

treeView1.Nodes[treeView1.Nodes.Count - 1].EnsureVisible(); 

檢查MSDN entry此方法以獲得更多信息。

編輯:
我想我找到了它。您可能有一個根節點,並且您想要滾動到視圖中的節點是該根節點的子節點。

TreeNode lastNode = treeView1.Nodes[treeView1.Nodes.Count - 1]. 
    Nodes[treeView1.Nodes[treeView1.Nodes.Count - 1].Nodes.Count - 1]; 
+0

我沒有根節點,對不起。 – Smeiff

+0

那麼,在我自己的例子中,最後一個節點滾動到視圖中。我看不到爲什麼它不適合你... – Treb