2009-07-21 3 views
4

TreeView의 .CollapseAll() 메서드 나 TreeNode에서 .Collapse() 메서드 호출 이외의 TreeView가 축소되는 이유는 무엇입니까?WinForms에서 TreeView가 갑자기 닫히는 이유는 무엇입니까?

현재 개발중인 응용 프로그램에서 TreeView가 제대로 작동하지 않습니다. TreeView는 두 가지 수준 만 유지합니다. 부모 노드의 자식을 선택하면 다른 모든 노드가 즉시 축소됩니다. 그러나, 내 코드에는 .Collapse() 또는 .CollapseAll() 메서드 호출이 전혀 없습니다!

TreeView의 모든 속성은 true로 설정된 .LabelEdit 속성을 제외하고는 기본값으로 유지됩니다. TreeView 간단한 Validation/MessageBox 루틴에 대한 AfterLabelEdit 이벤트 내에서 연결된 일부 코드가 있습니다.

나는 시도했다 :

  • 후킹 BeforeCollapse의 TreeView에의 이벤트와 e.CancelAction 플래그를 제기.

  • TreeView의 AfterSelect 이벤트에서 모든 노드 을 수동으로 확장합니다. (이는 실험으로 잘 작동하지만 내가
    모두 해제하면 노드 붕괴하지 않을!) 코드 내에서 많은 점에서

, 나는에, 노드의 트 리뷰를 통해 노드를 반복하고 속성을 확인하십시오. 그러나 노드 추가 또는 삭제가 발생하지 않습니다. 사용자가 선택할 때 수정되는 유일한 TreeNode 속성은 .ImageIndex 및 .SelectedImageIndex입니다.

위의 두 가지 해결책 외에도이 오류의 원인에 대한 단서가 없습니다. 솔루션을 실현할 수 없더라도 누군가가 붕괴를 감추고 갈 수있는 적절한 방법에 대한 아이디어를 갖고 있습니까? (필자는 BeforeCollapse 이벤트 내에서 중단 점을 설정하려고했지만, 사용자가 명시 적으로 마우스 나 키보드를 통해 노드를 축소하지 않는 한이 트리거되지 않습니다.)


UPDATE :

문제는 들어간 상태로 인해 TreeNode의 .SelectedImageIndex 속성 이 속성을 변경하면 다른 모든 노드가 축소됩니다.

.BeginUpdate() 및 .EndUpdate() 호출로 아무 소용이없는 .SelectedImageIndex 속성 수정 코드를 둘러 봤습니다.

어떻게 피할 수 있습니까?

답변

10

이것은 Windows에서 기본 Windows가 작동하는 방식의 부작용입니다. 많은 창 옵션은 CreateWindowEx() 호출에서 스타일 플래그에 의해 지정됩니다. 국경이 양식에 보이는 것과 같은 기본적인 것들. ListView의 어떤 종류의 뷰가 있어야합니다. TreeView에 체크 박스가 표시되어야하는지 여부.

이러한 스타일은 컨트롤의 속성으로 표시됩니다. 그러나 문제가 있습니다. 이러한 속성을 변경하려면 CreateWindowEx() 호출에서 새 스타일 플래그를 지정할 수 있도록 창을 처음부터 다시 만들어야합니다. 그 부작용이 창을 완전히 재현 그래서 모든 이전 상태를 잃게됩니다.

Windows Forms는 창을 다시 만든 후 이전 상태로 복원하여이 모양을 부드럽게 만들어주는 역할을합니다. 그러나 여기 저기에는 누수가 있습니다. 그리고 몇 가지 명백한 버그. TreeView의 한 가지 누수는 노드가 접혀 있고 그렇지 않은 노드의 정확한 상태입니다. 이것을 추적하는 것은 실용적이지 않습니다.

WatchView에 TreeView의 Handle 속성을 추가하여이를 진단하십시오. 변경 사항이 표시되면 속성을 찾았습니다. 스타일 플래그 목록을 사용할 수 있습니다 here, 아마도 해당 속성에 해당 이름을 매핑 할 수 있습니다.

아마도이 속성을 변경하지 않는 것 이외에이 문제에 대한 해결 방법이 없다는 것은 분명합니다. 이 문제는 WPF가 무엇입니까.

+0

종합적인 답변 주셔서 감사합니다. 트리를 다시 만드는 원인이되는 속성을 찾아 낼 수 있었고 초기화 시점을 지나서 사용하지 않았습니다. 트리가 더 이상 노드 상태를 잊지 않습니다. – James

+0

@HansPassant가 내 편집을 롤백 한 이유를 알고 있습니까? 감사 –

관련 문제