如何在使用添加列的扩展DataGridView控件时阻止设计器列复制?

时间:2017-09-05 07:20:41

标签: c# winforms datagridview

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

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

class CustomDataGridView : DataGridView
{
    public CustomDataGridView()
    {
        Columns.Clear();
        Columns.Add("Column", "Header");
    }
}

Columns.Clear()是不必要的 - 它只是为了说明问题不是构造函数。无论如何,将控件添加到表单中。导致表单UI重新加载(例如通过调整datagridview的大小),设计人员最终不断添加新列。我尝试了各种各样的想法而没有结果。我试图隐藏设计师的栏目属性,但不幸的是,因为它不是虚拟的,所以也是不行的。

有什么想法吗?我觉得我必须遗漏一些简单的东西,因为这可能是一个相当常见的使用模式。我可以在运行时添加列,但理想情况下我希望它们在设计器中可见/可编辑。

1 个答案:

答案 0 :(得分:1)

我在问题中提到的想法实际上似乎工作正常,只是使用非隐藏属性隐藏:

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

这解决了所有想要能够查看设计器中的列并与之交互的问题,并且由于此控件中的列不打算进行修改,因此可以接受 - 但是有没有办法实际添加列而不是像这样破解?