WinForms设计器将重复节点添加到TreeView的子类

时间:2017-08-02 18:42:32

标签: c# winforms treeview windows-forms-designer

我使用一些默认的TreeNodes创建了System.Windows.Forms.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子类?考虑我将向此子类添加事件和其他属性。

1 个答案:

答案 0 :(得分:0)

您需要覆盖或隐藏Nodes属性并添加[DesignerSerializationVisiblity(DesignerSerializationVisiblity.Hidden)]

这将告诉设计师停止序列化属性。

请注意,您必须重新打开并重新保存(重新编译后)使用您的控件的每个设计器才能实际更新.Designer.cs文件。