2012-04-20 2 views
1

StateImageList를 사용하여 트리에서 "적절한"3 상태 검사를 구현하는 treeview가 있습니다. 그러나 문제는 트리에 추가되는 노드의 첫 번째 계층입니다. 기본적으로 새 TreeNode의 StateImageIndex는 -1이며 실제로 추가되었는지 알 수있는 방법이 없습니다. 하위 노드 인 노드는 BeforeExpand를 잡아서 StateImageIndex를 올바르게 설정할 수 있지만 Top Layer의 노드에 대해 무엇을해야할지 파악하지 못하는 것 같습니다.노드가 트리 뷰에 추가 된시기를 알 수 있습니까?

현재 진행중인 작업 (정말 정말 싫어)은 백그라운드에서 실행중인 타이머를 실행하여 트리 뷰의 노드 수가 변경되었는지 확인합니다. 실행 한 경우 모든 루트 노드를 찾습니다. StateImageIndex가 -1로 설정되어 있고 0으로 설정되어 있습니다. 작동하지만 리소스의 끔찍한 낭비처럼 보입니다. 어느 누구보다 좋은 제안이 있습니까?

+0

OP는 자신의 프로그램에서 OP를 사용하는 것이 아니라 컨트롤을 만들고 있습니다. –

답변

3

이벤트가 발생하지 않으며 이벤트도 생성 할 수 없습니다. 네이티브 컨트롤은 사용자가 아닌 노드 만 추가 할 수 있기 때문에 이벤트를 지원하지 않습니다. TreeNodeCollection 클래스에 침입 할 수 없기 때문에 생성 할 수 없습니다. 간단한 해결책은 클래스에 정적 CreateNode() 팩토리 메소드를 추가하여 클라이언트 코드가이를 사용하여 올바르게 초기화 된 노드를 작성하는 것입니다.

노드를 원하는대로 그릴 수 있도록 DrawMode 속성을 고려해야합니다. 클릭을 탐지하는 HitTest(), 상자를 그리는 ControlPaint.DrawCheckBox().

+0

환상적입니다! Drawreen = OwnerDrawnText를 사용하기 때문에 이미 treenode의 일부분을 그리는 중입니다 ... StateImageIndex = -1 인 경우 거기에 체크인 할 수 있습니다 ... 감사합니다. –

관련 문제