我的解决方案中发生了最棘手的事情。 我有一个按钮,我定制。它继承UserControl,其文本在该控件内表示为Label。
当然,我希望覆盖按钮的文本以设置Label的文本:
要么,
/// <summary>
/// Gets or sets the text that appears in the button
/// </summary>
[Category("Appearance"), Description("Gets or sets the text on the button.")]
[Browsable(true)]
public override string Text
{
get
{
return base.Text;
}
set
{
base.Text = value;
labelButtonText.Text = value;
}
}
或者
/// <summary>
/// Gets or sets the text that appears in the button
/// </summary>
[Category("Appearance"), Description("Gets or sets the text on the button.")]
[Browsable(true)]
public override string Text
{
get
{
return labelButtonText.Text ;
}
set
{
labelButtonText.Text = value;
}
}
无论方法如何,当我在另一个UserControls / Forms中使用该按钮时, 我明确地在设计器中放入的文本在编译后消失了。
我检查了“Button.designer.cs”文件,并且没有UserControl和Label都没有将文本赋值为null,也没有为空。
编辑:此外,当我在设计器中设置Text属性时,它不会在* .designer.cs文件中设置。
提前致谢。
答案 0 :(得分:4)
是的,这是设计的。 UserControl.Text属性如下所示:
[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
[EditorBrowsable(EditorBrowsableState.Never)]
[Bindable(false)]
public override string Text
{
get
{
return base.Text;
}
set
{
base.Text = value;
}
}
您负责[Browsable]属性但不 [DesignerSerializationVisibility]。隐藏是使文本消失的原因。通过撤消所有属性来修复它:
[Browsable(true)]
[EditorBrowsable(EditorBrowsableState.Always)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
[Bindable(true)]
public override string Text {
// etc..
}