2017-08-02 54 views
0

的子類,我創建了System.Windows.Forms.TreeView類的一些默認樹節點的子類:的WinForms設計師將複製節點的TreeView

public class SimulationTreeView : TreeView 
{ 
    private TreeNode unitLoadsNode; 

    private TreeNode conveyorsNode; 

    private TreeNode aislesNode; 

    public SimulationTreeView() 
    { 
     this.unitLoadsNode = this.Nodes.Add("Unit Loads"); 
     this.conveyorsNode = this.Nodes.Add("Conveyors"); 
     this.aislesNode = this.Nodes.Add("Aisles"); 
    } 
} 

當我使用設計的控件添加到窗體和我運行代碼,我得到以下結果:

Result

的TreeNodes,是重複的,因爲設計器生成的代碼添加他們除了在類的構造函數已經生成的節點。 我可以很容易地刪除設計器文件中生成的代碼,但它很不理想,因爲每次更改我的TreeView子類時都需要更改生成的代碼。

TreeView子類應該如何實現而不會遇到這個問題?考慮我將添加事件和其他屬性到這個子類。

回答

0

您需要覆蓋或隱藏Nodes屬性並添加[DesignerSerializationVisiblity(DesignerSerializationVisiblity.Hidden)]

這會告訴設計者停止序列化屬性。

請注意,您必須重新打開並重新保存(重新編譯後)每個使用您的控件的設計器才能真正更新.Designer.cs文件。

+0

如何覆蓋'Nodes'屬性?當我嘗試這樣做時,我無法初始化它,因爲它的類型'TreeNodeCollection'沒有構造函數。 – Seiken

+0

@Seiken:你的覆蓋應該只返回'base.Nodes'。所有你需要的是添加屬性。 – SLaks