C#UserControl覆盖字体

时间:2016-08-17 11:59:53

标签: c# fonts user-controls

我目前正试图在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崩溃并重新启动。我做错了什么?

1 个答案:

答案 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;
    }
}
相关问题