“属性”窗口中的用户控件的子属性

时间:2013-02-25 17:57:18

标签: c# winforms

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

将我的用户控件放到设计器上时,我希望在“属性”窗口中看到这个内部DataGridView的属性。

我该怎么办?非常感谢。

3 个答案:

答案 0 :(得分:3)

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

这样的事情:

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

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

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

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:1)

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

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

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

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

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

只有在dataGrid1始终存在并且不是在代码中动态生成时,这才有效。