2

我有一个包含 DataGridView 的复合用户控件。此外,该DataGridView.Modifiers属性设置为Public

将我的用户控件放到设计器中时,我想在“属性”窗口中查看此内部 DataGridView 的属性。

我该怎么办?非常感谢。

4

3 回答 3

3

您的内部 DataGridVIew 需要在复合控件中定义一个实例和一个公共属性,通过它可以访问它。

像这样的东西:

// your grid control instantiated somewhere:
DataGridVIew myInnerDataGridVIew = new ...

public DataGridVIew MyInnerDataGridVIew 
{ 
  get { return myInnerDataGridVIew; } 
  set { myInnerDataGridVIew = value; } 
}

创建此属性并重新构建后,当在设计器中选择复合控件时,您应该会在属性窗口中看到一个 MyInnerDataGridVIew 成员,并且它旁边有一个 [+]。单击加号,您应该会看到 DataGridVIew 的属性已展开。

于 2013-02-25T18:00:34.307 回答
2

即使其他两个答案也是正确的,我认为更常见的方法是只允许只读访问内部网格实例的引用。

public DataGridView DataGrid { get { return this.dataGridView1; } }

这样,您的控件的用户可以访问所有网格属性并覆盖您为其选择的任何默认值(如背景颜色等),但他们不能用新实例替换网格,这可能会弄乱一些内部逻辑你的控制。

于 2013-02-25T19:09:41.347 回答
1

您需要做的是添加一个公共属性,以便将该控件拖入的任何容器都将其视为一个属性。

简单地说,假设您有 1 个名为 dataGrid1 的静态数据网格。现在要使其在外部可访问(并且在属性框中可见),您需要创建一个将设置并返回它的属性。

public DataGridView ChildDataGridView
{
    get { return this.dataGrid1; }
    set { this.dataGrid1 = value; }
}

这将允许您从外部对其进行修改。现在,当您将控件添加到设计器时,当您选择了用户控件时,您应该会看到一个名为 ChildDataGridView 的新属性。

您可以从该属性修改和访问它。

这仅在 dataGrid1 一直存在并且不是在代码中动态生成的情况下才有效。

于 2013-02-25T18:07:42.210 回答