2012-04-24 68 views
1

我在我的winform上有一個TreeView,它使用了TreeNode的子類以及一些我希望針對每個節點存儲的額外變量。用戶可以使用上下文菜單從我的樹中刪除節點。在winforms中擴展TreeNode功能

我希望能夠做的是擴展TreeNode的Remove方法,以便在刪除節點之前在那裏做一些額外的處理。有沒有辦法做到這一點?

爲了澄清...

有沒有辦法爲樹節點擴展現有的刪除方法使代碼可以執行它的實際執行刪除之前?

乾杯,

編輯:我其實假設方式,我將不得不做,這是與()改爲調用this.Remove一種新的方法擴展類?

編輯2:這就是我最終做的。這是不是最好的辦法...

public partial class CustomTreeNode : TreeNode 
{ 
    // My custom TreeNode vars 
    public int UID; 
    public int ParentUID; 

    public CustomTreeNode(string nodeName) : base(nodeName) 
    { 
     // Set the tree node here 
    } 

    public void RemoveIt() 
    { 
     // Custom stuff 
     System.Console.WriteLine("Deleted"); 

     base.Remove(); 
    } 

} 

回答

1

在子類

public new void Remove() 
{ 
    //do your custom stuff 

    base.Remove(); // calls the TreeNode Remove method 
} 

編輯試試這個:增加了新的去除覆蓋

要知道,任何時候您引用子類對象作爲TreeNode,那麼你的自定義刪除方法將不會被調用Difference between new and override

你也可以命名爲這樣的其他功能:

public void SuperRemove() 
{ 
    //do your custom stuff 

    base.Remove(); // calls the TreeNode Remove method 
} 
+0

當我嘗試這樣做時,我得到「無法重載繼承的成員'System.Windows.Forms.TreeNode.Remove()',因爲它沒有標記爲虛擬的,抽象的或覆蓋。 – Simon 2012-04-24 16:11:45

+0

哦,是的,我忘記了,編輯我的回答 – Joel 2012-04-24 16:31:06

0

您正在從上下文菜單中刪除節點。爲什麼不向MenuItem_Click事件處理程序添加一些額外的處理?您可以在調用Remove節點之前執行任何操作。

+0

主要是因爲這個動作會在我的樹中發生很多,我希望對象本身能夠處理它從SQL中刪除,而不必爲.Remove()的每個實例編寫所有代碼。 – Simon 2012-04-24 17:23:47