当TableLayoutPanel
上有Form
并且您将Label
拖到单元格中时,Label
控件上会显示一些属性。我认为在表单上拖动Tooltip
控件时会使用相同的构造。
我想知道使用哪种设计模式来实现这一目标。这是装饰者模式吗?
答案 0 :(得分:7)
您所看到的内容称为Extender Providers。
例如,当工具提示组件添加到表单时,它提供 一个名为ToolTip的属性,用于该表单上的每个控件。工具提示 属性然后出现在任何附加的PropertyGrid控件中。 http://msdn.microsoft.com/en-us/library/ms171836.aspx
我无法想象一个众所周知的模式,它描述了它们是如何工作的,但机制很简单。
您必须实施IExtenderProvider
。 WinForms Designer将为表面上的每个其他控件调用CanExtend
,并且扩展程序可以指定它是否为每个控件提供其他属性。
public interface IExtenderProvider {
bool CanExtend(object extendee);
}
将使用ProvidePropertyAttribute
和a method to provide the value声明其他控件将扩展的实际属性。
答案 1 :(得分:1)
不,这不是通过设计模式实现的。这些属性只是控件公开的公共属性,这些属性通过继承添加到控件中,即它们是子类Control
。 visual studio designer检查实现这些控件的类以确定它们公开的属性,然后为您提供用于设置它们的UI。