DataGridView锁定在inheritance的UserControl上

我有一个带有一些预定义控件的UserControl(groupbox,button,datagridview),这些控件被标记为protected,组件变量也被标记为protected。

然后我想从这个基本UserControlinheritance到另一个UserControl,但DataGridView始终锁定在设计器中。

我怀疑它可能与实现ISupportInitilize的DataGridView有关。

public class BaseGridDetail : UserControl 

已定义DataGridView控件(等)。

 public class InheritedDetail : BaseGridDetail 

DataGridView控件已锁定

有没有人有任何想法如何在inheritance之后在设计师中提供此控件?

从它的外观来看,DataListView(和一些其他控件)不支持可视inheritance。 这里记录了一个连接问题,看起来并不乐观。

使用其他表单控件记录了类似的问题,例如flowlayoutpanel 。

我无法找到强制视觉inheritance的方法。

这是关于连接的官方答案:“对于这个特定的版本,DataGridView并非设计用于视觉传播。我们将在计划未来发布时牢记您的建议”那是2006年5月26日。

更新:发现此博客文章可能有答案

编辑:我无法validation博客post的声明。 看起来可能是这个问题的最新消息

看起来您仍然可以在运行时操作DataListView,因此您可以设置可视属性(和其他设置)。 这不是一个很好的妥协。

[1]创建自定义用户控件

[2]使您的自定义userControl使用下面的Inherited DataGridView:

 [Designer(typeof System.Windows.Forms.Design.ControlDesigner))] public class InheritedDataGridView : DataGridView { } 

[3]inheritance自己的自定义用户控件,并且中提琴!!

[4]哦,别忘了添加“System.Design”dll

请享用。

将datagrid添加到面板控件并将面板和数据网格的修改器设置为protected。 这将使您所有inheritance的表单设计时间访问网格的属性。

我留下了答案,但重新阅读了你的问题并决定将其删除。

您在inheritance的控件中尝试修改的DataGridView是什么? 这是专栏? 我已经能够通过在我的基本UserControl中设置一个受保护的方法并将网格的列集合传递给它来实现这一点,如下所示:

 // in base UserControl public BaseGridDetail() { InitializeComponent(); InitGridColumns(dataGridView1.Columns); } protected virtual void InitGridColumns(DataGridViewColumnCollection columns) { columns.Clear(); } 

现在您的派生控件可以简单地覆盖该方法,如下所示:

 // in InheritedDetail protected override void InitGridColumns(DataGridViewColumnCollection columns) { base.InitGridColumns(columns); // add my own custom columns } 

将属性更改为在xx.designer.cs中定义的[private]到[protected],这是最初的机器生成代码。

例如

  private System.Windows.Forms.Button btnSave; 

  protected System.Windows.Forms.Button btnSave; 

并重建它。

那么你可以改变inheritance控制的属性。