你能否向自定义控件的子控件添加自定义属性?

4
如果您在表单中添加一个TableLayoutPanel,并向其中的一个单元格添加控件,则添加的控件在属性窗口中具有额外的属性(例如:行、行跨度、列、列跨度、单元格等)。
我的问题是,如果您创建自己的自定义控件/组件,是否有一种方法可以向成为自定义控件子级的任何现有控件添加属性,就像TableLayoutPanel的行为一样?

3
是的 - 这些称为 ExtenderProviders。 ErrorProvider 和 ToolTip 组件是很好的例子。你也可以将这种功能加入到自己的控件中。它们通常用于向某些控件类型添加属性,而不是子控件。关于该控件如何仅在成为子控件后添加属性的问题,这是一个很好的问题...我需要想一下。可能会将其添加到合格的控件中,但直到它成为子控件才可见/激活。 - Ňɏssa Pøngjǣrdenlarp
很酷,这是我要研究和学习的新东西。谢谢@Plutonix - Alex
1个回答

0

我猜你正在寻找ProvideProperty属性

http://msdn.microsoft.com/en-us/library/d6c1xa43.aspx

在下面的代码中,您可以看到它在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 {

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接