2012-09-06 3 views
4

이 문제점의 원인을 파악하는 데 문제가 있습니다. 나는 주위를 봤 거든이 문제에 대한 많은 해결책을 찾지 못했습니다. 내가 찾은 유일한 "솔루션"은 마지막 노드를 확장하고 축소하는 해킹이었습니다. 노드가 부분적으로 winform에서 잘림 TreeView

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

이 화면에서 볼 수 있듯이

마지막 노드가 부분적으로 차단하고있는 유일한 방법은 그것이 트 리뷰가 올바르게 자체를 다시 렌더링하게됩니다 노드를 확장하는 것입니다 노출 촬영.

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() 전에 시각적 변경 후.

SuspendLayout() 및 ResumeLayout()도 유용 할 수 있습니다.

UI 업데이트를 원하면 모든 노드를 한 번에 추가하지 마십시오! 하나씩 추가하고 begin과 endupdate 호출 사이에 끼 웁니다.

+2

고마워요! 이것은 효과가 있었다. 트리가 빌드되는 동안 내 UI가 더 이상 업데이트되지 않지만 트리가 올바르게 표시됩니다. – Smeiff

0

TreeNode 클래스의 Expand 메서드를 확인하십시오. http://msdn.microsoft.com/en-us/library/system.windows.forms.treenode.aspx

+0

내 원래의 질문에서, 나는 확장을 사용했고, 붕괴가 뒤따 랐고, 내 문제를 해결했다. 이것은 내가 찾고있는 해결책이 아닙니다. 나는 왜 항목이 처음부터 잘린 지 궁금해. 확장을 수행하고 싶지 않은 이유는 확장시 해당 노드 내부의 콘텐츠에 대한 API를 쿼리하기 때문입니다. 이 방법으로 초기로드 시간을 절약합니다. 그렇지 않으면로드가 영원히 걸릴 것입니다. – Smeiff

1

당신은이 같은 문제의 TreeViewNode에 EnsureVisible를 호출 할 수 있습니다 참조 :

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

추가 정보는이 방법에 대한 MSDN entry을 확인합니다.

편집 :
는 내가 그것을 발견 생각합니다. 당신은 아마도 루트 노드를 가지고 있으며, 당신이 볼 것을 원하는 노드는 그 루트 노드의 서브 노드입니다.

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

또는 마지막 노드를 얻기 위해 MSDN 문서에서 예제를 사용 : 대신이 시도

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

루트 노드가 없습니다. 미안합니다. – Smeiff

+0

글쎄, 내 자신의 예제에서는 작동, 마지막 노드보기로 스크롤합니다. 나는 그것이 당신을 위해 효과가 없어야하는 이유를 볼 수 있습니다 ... – Treb