1
TreeNode
유형 TreeNodeEx
을 파생 시켰습니다. 내 TreeNodeEx
있음, 그것에 할당 된 일부 값 개체 NameChanged
이벤트를 구독합니다. 이 값의 수명은 트리 노드의 수명보다 길다.트리 노드 처분
제 생각에 트리 노드가 제거 될 때 값에는 여전히 이벤트 처리기 대리인을 통해 트리 노드에 대한 참조가 있습니다. 그래서 이것은 트리 노드에 매달린 참조를 유지합니다. 따라서
TreeNode
이 IDisposable
하지 않고, 그것을 제거 할 때 알고 TreeNode
에 오버라이드 (override) 할 이벤트 나 방법이없는, 그리고, 나는 이벤트에서 풉니 다해야 할 때. 그래서, 어떻게 언 후크해야 하는지를 어떻게 알 수 있습니까?
class TreeNodeEx : TreeNode {
private Foo m_value;
public Foo Value {
get { return m_value; }
set {
if (m_value != null) {
m_value.NameChanged -= ValueNameChanged;
}
m_value = value;
if (m_value != null) {
m_value.NameChanged += ValueNameChanged;
}
}
}
private void ValueNameChanged(object sender, EventArgs e) {
// ...
}
}
TreeView는 컬렉션 클래스로 설계되지 않았으므로 문자열을 표시 할 때만 유용합니다. 그것이 더 잘되도록 노력하는 것은 결코 잘되지 않습니다. 모델을보기와 구분하여 일반 TreeNode 만 사용하고 자신의 컬렉션 클래스에서해야하는 작업을 수행하십시오. –
사용자가 노드를 단독으로 제거 할 수있는 방법이 없으므로 코드에서 treeView1.Nodes.Remove (...)를 호출하는 곳에서 처분 의무를 처리해야합니다. – LarsTech
@LarsTech Duh. 그걸 한번 생각해 봤어? 대답 해 주면 받아 들일거야. –