1
我派生了一個自定義TreeNode
類型,TreeNodeEx
。在我的TreeNodeEx
中,我訂閱了分配給它的某個Value對象的NameChanged
事件。此值的生命週期比樹節點的生命週期長。處理樹節點
我的想法是,當樹節點被刪除時,Value仍然通過事件處理程序委託引用樹節點。所以這將保持對樹節點的懸掛引用。
TreeNode
不IDisposable
,並沒有事件或方法在TreeNode
覆蓋,當它被移除知道,因此,當我應該從事件脫鉤。那麼,我怎麼知道何時解除?
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沒有被設計爲一個集合類,它只是擅長顯示字符串。試圖讓它做得更好從來沒有好的工作。將模型從視圖中分離出來,以便只使用普通的TreeNodes並在您自己的集合類中執行需要的任何操作。 – 2012-07-17 19:50:54
用戶無法自行移除節點,因此,在代碼中調用'treeView1.Nodes.Remove(...)'的時候是您應該處理處理任務的時間。 – LarsTech 2012-07-17 19:51:57
@LarsTech Duh。打倒那個,是吧?做出答案,我會接受。 – 2012-07-17 19:53:51