我正在创建一个DataGridView继承的控件,它执行一些样式化并添加了许多列。问题是,当此控件添加到另一个表单时,设计人员会发现Columns属性与其默认值不匹配,因此会在新表单中向设计器添加列生成。
说明问题。采取以下控制措施:
class CustomDataGridView : DataGridView
{
public CustomDataGridView()
{
Columns.Clear();
Columns.Add("Column", "Header");
}
}
Columns.Clear()是不必要的 - 它只是为了说明问题不是构造函数。无论如何,将控件添加到表单中。导致表单UI重新加载(例如通过调整datagridview的大小),设计人员最终不断添加新列。我尝试了各种各样的想法而没有结果。我试图隐藏设计师的栏目属性,但不幸的是,因为它不是虚拟的,所以也是不行的。
有什么想法吗?我觉得我必须遗漏一些简单的东西,因为这可能是一个相当常见的使用模式。我可以在运行时添加列,但理想情况下我希望它们在设计器中可见/可编辑。
答案 0 :(得分:1)
我在问题中提到的想法实际上似乎工作正常,只是使用非隐藏属性隐藏:
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public new DataGridViewColumnCollection Columns { get => base.Columns; }
这解决了所有想要能够查看设计器中的列并与之交互的问题,并且由于此控件中的列不打算进行修改,因此可以接受 - 但是有没有办法实际添加列而不是像这样破解?