Vb.net 能否向自定义控件的子控件添加自定义属性?

Vb.net 能否向自定义控件的子控件添加自定义属性?,vb.net,winforms,visual-studio-2012,Vb.net,Winforms,Visual Studio 2012,如果将TableLayoutPanel添加到窗体,然后将控件添加到其中一个单元格,则添加的控件在属性窗口中具有额外的属性(例如:行、行跨度、列、列跨度、单元格等) 我的问题是,如果您创建自己的自定义控件/组件,是否有一种方法可以将属性添加到任何成为自定义控件子控件的现有控件,如TableLayoutPanel的行为?我猜您正在查找ProvideProperty属性 在下面的代码中,您可以看到它是如何在TableLayoutPanel中使用的 [ProvideProperty("ColumnSp

如果将TableLayoutPanel添加到窗体,然后将控件添加到其中一个单元格,则添加的控件在属性窗口中具有额外的属性(例如:行、行跨度、列、列跨度、单元格等)


我的问题是,如果您创建自己的自定义控件/组件,是否有一种方法可以将属性添加到任何成为自定义控件子控件的现有控件,如TableLayoutPanel的行为?

我猜您正在查找ProvideProperty属性

在下面的代码中,您可以看到它是如何在TableLayoutPanel中使用的

[ProvideProperty("ColumnSpan", typeof(Control))]
[ProvideProperty("RowSpan", typeof(Control))]
[ProvideProperty("Row", typeof(Control))] 
[ProvideProperty("Column", typeof(Control))]
[ProvideProperty("CellPosition", typeof(Control))] 
[DefaultProperty("ColumnCount")] 
[DesignerSerializer("System.Windows.Forms.Design.TableLayoutPanelCodeDomSerializer, " + AssemblyRef.SystemDesign, "System.ComponentModel.Design.Serialization.CodeDomSerializer, " + AssemblyRef.SystemDesign)]
[Docking(DockingBehavior.Never)] 
[Designer("System.Windows.Forms.Design.TableLayoutPanelDesigner, " + AssemblyRef.SystemDesign)]
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.AutoDispatch)]
[SRDescription(SR.DescriptionTableLayoutPanel)] 
public class TableLayoutPanel : Panel, IExtenderProvider {

是-这些被称为扩展提供程序。ErrorProvider和工具提示组件就是很好的例子。您还可以将该功能构建到自己的控制中。与子控件相比,它们通常用于向某些控件类型添加属性。(这是一个很好的问题,关于控件如何仅在某个对象成为它的子对象时添加属性……我必须考虑一下)。它可以添加到符合条件的控件中,但在它成为子控件之前不可见/活动。很酷,这对我来说是一个新的研究和学习内容。谢谢@puropoix