2012-11-16 2 views
2

TreeNode 속성 NextVisibleNode이 어떻게 의미 상 정의되어 있는지 궁금합니다. 나는 그것이 이 아니며 의 IsVisible 속성과 일치합니다.에 해당하지 않는 것으로 나타났습니다.TreeNode.NextVisibleNode가 깨졌습니까?

TreeViewTreeNode 일 때 클라이언트 영역에 표시 할 수있는 것보다 많습니다 (예 : 스크롤바가 나타남).

실제로 표시되는 첫 번째 TreeNode 다음 모든 TreeNode의이 계산됩니다 ...

int numVisible = 0; 

for (TreeNode node = treeView.TopNode; 
    node != null; 
    node = node.NextVisibleNode) 
{ 
    // Do something... 
    ++numVisible; 
} 

... 단지 다음 코드로 클라이언트 영역에서 볼 수 있습니다 그 TreeNode의 반복하려고 할 때 . TopNode이 예상대로 작동하지만 TreeNode의 올바른 하위 집합을 반복하기 위해서는 for의 조건을 node != null && node.IsVisible으로 확장해야합니다.

NextVisibleNode의이 동작은 의도적입니까? 버그 일 수 있습니까?

+0

입니다. 그래서 보이는 노드를 반복하고 싶습니까? –

+0

@MicahArmantrout 맞습니다. 'TopNode'와'NextVisibleNode'를 사용하면 모든'TreeNode'를 반복적으로 반복하는 것보다 더 짧고 읽기 쉬운 코드를 얻을 수 있다고 생각했습니다. 그러나'NextVisibleNode'의 이상한 행동은 나를 혼란스럽게 만들었습니다. –

+1

보고있는 문제를 재현 할 수있었습니다. –

답변

1

"디자인대로"또는 버그 인 것 같습니다.

What does TreeNode.NextVisibleNode have to return

아마도 NextVisibleNode가 확장 상태 (로 볼 수에 포함되지 않습니다 확장되지 않습니다 즉 자식 노드)을 의미하지만,하지 :하지만 IsVisible를 확인하는 당신의 접근 방식과 같은 소리는가는 방법이다 실제 IsVisible 속성 그것은 제한된 테스트로 볼 수있는 행동입니다. 그리고 그것과 유일한 차이점은 NextNode

+0

아주 정확하지 않습니다. 'NextVisibleNode'와는 달리'NextNode'는 자식이나 형제 인'TreeNode' 만 리턴합니다. 그러나 다른 브랜치의 "cousin"'TreeNode'는 결코 반환하지 않습니다. 그럼에도 불구하고, 나는 당신과 한스 패전트가 올바르게 이해했다고 생각합니다. "눈에 보이는"아마 확장 상태를 참조합니다. 버그가있어서 또는 (열악한) 디자인으로. –

+0

@Abbandanza. 그것을 알지 못했습니다 - 명확히 해 주셔서 감사합니다. –

관련 문제