代码之家  ›  专栏  ›  技术社区  ›  benPearce

DataGridView锁定在继承的UserControl上

  •  10
  • benPearce  · 技术社区  · 16 年前

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

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

    public class BaseGridDetail : UserControl
    

    定义了DataGridView控件(等)。


    public class InheritedDetail : BaseGridDetail
    

    DataGridView控件已锁定


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

    5 回复  |  直到 16 年前
        1
  •  13
  •   RobS    16 年前

    从外观上看,DataListView(和其他一些控件)不支持可视继承。有一个连接问题 logged here

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

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

    connect : “对于此特定版本,DataGridView的设计不是为了在visual Intritance中使用。我们将在计划未来的版本时牢记您的建议” 那是2006年5月26日。

    更新:找到 this blog post which may have the answer

    看起来像 might be the latest on this issue

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

        2
  •  9
  •   Robocide    14 年前

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

    [2] 使自定义userControl使用以下继承的DataGridView:

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

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

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

        3
  •  3
  •   John    13 年前

        4
  •  1
  •   Matt Hamilton    16 年前

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

    您试图在继承的控件中修改的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
    }
    
        5
  •  -1
  •   Na Youngmin    8 年前

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

    例如

        private System.Windows.Forms.Button btnSave;
    

        protected System.Windows.Forms.Button btnSave;
    

    并重建它。

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