C# 当使用添加列的扩展DataGridView控件时,如何防止设计器列复制?

C# 当使用添加列的扩展DataGridView控件时,如何防止设计器列复制?,c#,winforms,datagridview,C#,Winforms,Datagridview,我正在创建一个DataGridView继承控件,该控件执行一些样式化并添加许多列。问题是,将此控件添加到另一个窗体时,设计器会发现Columns属性与其默认值不匹配,因此会在新窗体中将列生成添加到设计器中 来说明问题。采取以下控制措施: class CustomDataGridView : DataGridView { public CustomDataGridView() { Columns.Clear(); Columns.Add("Colum

我正在创建一个DataGridView继承控件,该控件执行一些样式化并添加许多列。问题是,将此控件添加到另一个窗体时,设计器会发现Columns属性与其默认值不匹配,因此会在新窗体中将列生成添加到设计器中

来说明问题。采取以下控制措施:

class CustomDataGridView : DataGridView
{
    public CustomDataGridView()
    {
        Columns.Clear();
        Columns.Add("Column", "Header");
    }
}
Columns.Clear()是不必要的-它只是用来说明问题不在于构造函数。无论如何,将控件添加到表单中。导致表单UI重新加载(例如,通过调整datagridview的大小),设计器最终会不断添加一个新列。我尝试过各种各样的想法,但都没有结果。我试图对设计器隐藏columns属性,但不幸的是,因为它不是虚拟的,所以也不可能


有什么想法吗?我觉得我一定错过了一些简单的东西,因为这大概是一种相当常见的使用模式。我可以在运行时添加列,但理想情况下,我希望它们在设计器中保持可见/可编辑。

我在问题中提到的想法实际上似乎可以很好地使用,而不是真正隐藏属性隐藏:

    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
    public new DataGridViewColumnCollection Columns { get => base.Columns; }

这解决了希望能够在设计器中查看列并与之交互的所有问题,并且由于此控件中的列不打算修改,因此这是不可接受的-但是有没有一种方法可以在没有类似的黑客攻击的情况下实际添加列?

首先,每次加载表单UI时,都会在加载UI中添加列(设计时)。第二,不应在控件构造函数中添加列,但如果需要,请将其放入条件块中,例如,如果(!DesignMode){code here}我也尝试过!DesignMode.it(似乎)应该可以,但不行。如果可能的话,共享代码。社区可以很容易地复制并建议解决方法/解决方案,而不是一直猜测可能出现的问题。问题是否还不清楚?我已尝试将其分解为最基本的情况。我想在扩展datagridview控件中添加一组预定义的列。据我所知,您的解决方案是-在上述代码中-更改列。将(..)添加到if(!DesignMode)列。添加(…)。这不起作用。