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控制的属性。