我目前正试图在C#中覆盖Visual Studio中自定义UserControl的font属性。该属性应该只取用户控件中的标签字体,并忽略UserControl的字体属性。
代码:
[Bindable(true)]
[Browsable(true)]
[Category("Appearance")]
[Description("The font of the text in the control")]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
[EditorBrowsable(EditorBrowsableState.Always)]
public override Font Font
{
get { return label1.Font; }
set { label1.Font = value; }
}
但是当我编译项目源代码并将新的UserControl添加到表单时,Visual Studio崩溃并重新启动。我做错了什么?
答案 0 :(得分:4)
首先,我想说对不起,在找到自己出了什么问题后,我自己回答了自己的问题。但我认为这个问题不会很罕见,所以答案就是这样:
首先,当您创建自己的costomized UserControl时,请记住首先创建您正在使用的UserControl,然后创建UserControl中的控件。在UserControl中实现Font属性时,将执行get-Accessor,而InitializeComponent()仍未执行,这将导致VS崩溃,当Font属性以我的方式引用另一个Font属性时。代码看起来应该是这样的:
private Font m_Font = DefaultFont;
[Bindable(true)]
[Browsable(true)]
[Category("Appearance")]
[Description("The font of the text in the control")]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
[EditorBrowsable(EditorBrowsableState.Always)]
public override Font Font
{
get { return m_Font; }
set
{
m_Font = value;
label1.Font = m_Font;
}
}