2012-07-02 3 views
1

나는 winform에 대한 treeview 컨트롤을 가지고 있으며 onChange 이벤트를 구현해야한다. 그러나 그것은 하나도없고 onChangeUI 만 가지고있는 것처럼 보입니다..net의 동등한 Treeview.OnChange 이벤트는 무엇입니까?

treeview가 onChange 이벤트를 지원하지 않으면 .NET에서 해당 항목은 무엇입니까?

MSDN Library를 (를) 검색 한 결과 아무 정보도 찾지 못했습니다.

업데이트 : 사이드 노트 나는 .net 용 win32 프로그램을 변환 중입니다. 사전에

감사합니다, 선택 변경에 대한

+0

'SelectedNodeChanged' 이벤트를 보셨습니까? – Kane

+1

@Kane, 그건 ASP.NET 트리 컨트롤을위한 것이지 Windows Forms는 아닙니다. digitalanalog, 어떤 종류의 변화 사건을 찾고 있습니까? 선택 변경? 품목 레이블 변경? 다른 것? –

+0

@ FrédéricHamidi 감사합니다. 오늘을위한 순간. 'BeforeXXX'와'AfterXXX' 이벤트 중 어느 것이 당신이 필요로하는 것들을 선택할 수 있습니까? – Kane

답변

3

지원은 Windows에서 제한 조금 TreeView 컨트롤을 형성한다.

기본적으로 트리 노드를 선택하면 반응 할 수있는 이벤트 (BeforeSelectAfterSelect)가 있습니다. BeforeSelect을 사용하면 새 선택을 취소 할 수 있습니다 (AfterSelect은 새 선택이 커밋 된 후에 발생하므로).

그러나 노드가 이 선택되어 있지 않으면이 아닌 이벤트가 발생하지 않습니다. 이 경우를 감지하려면 일반 MouseUp 이벤트를 처리하고 클릭 한 노드의 IsSelected 속성을 확인하여 실제 선택 상태를 가져와야합니다.

1

이것은 네이티브 Windows 컨트롤을 래핑하는 래퍼 클래스의 일반적인 제한 사항입니다. 당신이 알 수없는 것들에 대해서만 통지를 생성합니다. 사용자가 할 수있는 모든 작업이 컨트롤에 영향을 미칩니다. 에 대한 알림이 생략되며, 이미 알고있는 것에 대해 생각 나지 않아도된다는 근본적인 철학이 있습니다.

확실히 TreeView의 경우는 사용자가 노드를 추가 할 수 없습니다. 너만 할 수있어. 노드에 표시되는 텍스트와 동일합니다. 텍스트가 변경되었음을 알리는 이벤트가 없습니다. 매우 특정한 경우를 제외하고 사용자가 AfterLabelEdit 이벤트를 노드를 편집합니다.

TreeView에서 고유 한 클래스를 파생시키고 해당 이벤트를 발생시키는 Change 이벤트와 OnChange() 메서드를 추가 할 수 있습니다. 메서드를 호출하는 코드는 사용자가 작성해야합니다. 이 작업을 안정적으로 수행하기는 어렵습니다. TreeNodeCollection 클래스에는 가상 메소드가 없으므로 노드를 변경하여 클라이언트 코드를 감지 할 수 없습니다. 실제로 코드를 작성하지 않고 단순히 TreeView 내용을 수정하는 모든 메서드에서 내부 이벤트를 양식에서 생성하는 것이 더 좋습니다.

+0

대부분의 답변에 동의하지만 문제가되는 제한 사항은 Windows에 고유하지 않습니다. 좋은 옛날 방식의 treeview 컨트롤에는 [TVN_SELCHANGING] (http://msdn.microsoft.com/en-us/)이 있습니다. 라이브러리/windows/desktop/bb773547.aspx) 및 [TVN_SELCHANGED] (http://msdn.microsoft.com/en-us/library/windows/desktop/bb773544.aspx) (둘 다 트리 노드가있을 때 실행됩니다) 선택되지 않은 채로 선택됩니다. 물론, 다중 선택은 그때 구현하기 위해 너의 것이었지만 IMHO조차도 틀림없이 단순한 선택 이벤트를 처리하기 위해 지금까지 뛰어야 만하는 농구를 정당화하지 않는다. –