我创建了一个自定义控件和组件,如下面的代码
public class CustomComponent : Component
{
private string style;
public CustomControl Control { get; set; }
public string Style
{
get
{
return style;
}
set
{
style = value;
Control.Style = value;
}
}
}
public class CustomControl : Control
{
string style;
public string Style
{
get
{
return style;
}
set
{
style = value;
}
}
}
之后我将控件添加到表单和组件中。然后尝试分配Component.Control值。如果我尝试更改组件的样式属性,则在赋值后,控件中的样式属性不会在设计器级别更改,如下图所示,
如果我点击了控件的Style属性,它将更新,如下图所示,
答案 0 :(得分:2)
您需要更正代码中的一些内容。 Style
的{{1}}属性应更改为:
CustomComponent
您应该检查[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
[RefreshProperties(System.ComponentModel.RefreshProperties.All)]
public string Style
{
get
{
if (Control != null)
return Control.Style;
else
return null;
}
set
{
if (Control != null)
Control.Style = value;
}
}
是否不是,获取或设置控件的Control
值。您不需要定义成员变量来存储属性值,因为它属于另一个控件。
此外,由于您不需要序列化组件的属性(因为它已为您的控件序列化),因此请使用Style
属性DesignerSerializationVisibility
来装饰它。
另外,当您想要在编辑组件的Hidden
属性时刷新PropertyGrid
以显示其他属性(例如Control.Style
属性)中的更改时,请使用{{1}进行装饰具有Style
值的属性。