C# 用户控制';在“属性”窗口中设置子属性

C# 用户控制';在“属性”窗口中设置子属性,c#,winforms,C#,Winforms,我有一个包含DataGridView的复合用户控件。此外,DataGridView.Modifiers属性设置为Public 将用户控件放到设计器中时,我希望在“属性”窗口中查看此内部DataGridView的属性 我该怎么办?非常感谢。您的内部DataGridVIew需要在复合控件中定义一个实例和一个公共属性,通过它可以访问它 大概是这样的: // your grid control instantiated somewhere: DataGridVIew myInnerDataGridVIe

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

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


我该怎么办?非常感谢。

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

大概是这样的:

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

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

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

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

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

public DataGridView ChildDataGridView
{
    get { return this.dataGrid1; }
    set { this.dataGrid1 = value; }
}
这将允许您从外部对其进行修改。现在,当您将控件添加到设计器中时,当您选择了用户控件时,应该会看到一个名为ChildDataGridView的新属性

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


这只有在dataGrid1始终存在并且不是在代码中动态生成的情况下才有效。

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

public DataGridView DataGrid { get { return this.dataGridView1; } }
通过这种方式,控件的用户可以访问所有网格属性,并覆盖为其选择的任何默认值(如背景色等),但它们无法使用新实例替换网格,这可能会打乱控件的某些内部逻辑