13

我有一个用户控件,上面有一些预定义的控件(组框、按钮、数据网格视图),这些控件被标记为受保护,组件变量也被标记为受保护。

然后我想从这个基本 UserControl 继承到另一个 UserControl,但是 DataGridView 总是锁定在设计器中。

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

public class BaseGridDetail : UserControl

定义了一个 DataGridView 控件(等)。


public class InheritedDetail : BaseGridDetail

DataGridView 控件被锁定


有没有人知道如何在继承后使此控件在设计器中可用?

4

5 回答 5

13

从外观上看,DataListView(和其他一些控件)不支持视觉继承。这里记录了一个连接问题,看起来不太乐观。

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

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

这是关于connect的官方回答:“对于这个特定版本,DataGridView 并非设计用于视觉继承。我们在计划未来版本时会牢记您的建议”这是 2006 年 5 月 26 日。

更新:发现这篇博文可能有答案

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

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

于 2008-10-16T05:40:51.927 回答
9

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

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

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

[3] 从您的自定义 UserControl 和 viola 继承!

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

享受。

于 2010-09-06T06:08:35.263 回答
3

将数据网格添加到面板控件,并将面板和数据网格的修饰符设置为受保护。这将您继承的所有表单设计时访问网格的属性。

于 2011-09-16T15:40:31.967 回答
1

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

您尝试在继承的控件中修改的 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
}
于 2008-10-16T05:17:12.350 回答
-1

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

例如

    private System.Windows.Forms.Button btnSave;

    protected System.Windows.Forms.Button btnSave;

并重建它。

然后您可以更改继承控件的属性。

于 2016-07-12T00:55:49.903 回答