【发布时间】:2017-09-05 07:20:40
【问题描述】:
我正在创建一个 DataGridView 继承控件,该控件执行一些样式化并添加许多列。问题是,当将此控件添加到另一个表单时,设计人员会看到 Columns 属性与其默认值不匹配,因此将列生成添加到新表单中的设计人员。
为了说明问题。采取以下控制:
class CustomDataGridView : DataGridView
{
public CustomDataGridView()
{
Columns.Clear();
Columns.Add("Column", "Header");
}
}
Columns.Clear() 是不必要的 - 它只是为了说明问题不在于构造函数。无论如何,将控件添加到表单中。导致表单 UI 重新加载(例如通过调整 datagridview 的大小),并且设计器最终会不断添加新列。我尝试了各种想法,但没有结果。我试图对设计器隐藏 columns 属性,但不幸的是它不是虚拟的,这也是不行的。
有什么想法吗?我觉得我必须遗漏一些简单的东西,因为这可能是一种相当常见的使用模式。我可以在运行时添加列,但理想情况下我希望它们在设计器中保持可见/可编辑。
【问题讨论】:
-
首先,每次加载表单 UI 时(设计时),都会在加载 UI 上添加该列。其次,不应在控件构造函数中添加列,但如果需要,请将其放在条件块中,例如if (!DesignMode) {这里的代码}
-
我也试过了!DesignMode。它(似乎)应该工作,但没有。
-
如果可能,分享代码。社区很容易重现和建议解决方法/解决方案,而不是继续猜测可能出了什么问题。
-
问题不明确吗?我试图将其分解为最基本的情况。我想在扩展的 datagridview 控件中添加一组预定义的列。据我所知,您的解决方案是 - 在上面的代码中 - 将 Columns.Add(..) 更改为 if(!DesignMode) Columns.Add(...)。那是行不通的。
标签: c# winforms datagridview