C# UserControl 覆盖字体

Tem*_*.Me 4 c# fonts user-controls

我目前正在尝试在 C# 中的 Visual Studio 中覆盖自定义 UserControl 的字体属性。该属性应仅采用用户控件中标签的字体,而忽略 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; }
}
Run Code Online (Sandbox Code Playgroud)

但是当我编译项目源代码并将新的 UserControl 添加到表单时,Visual Studio 崩溃并重新启动。我究竟做错了什么?

Tem*_*.Me 5

一开始我想说对不起,我在发现自己出了什么问题后自己回答了自己的问题。但我认为这个问题并不罕见,所以答案如下:

首先,当您创建自己定制的 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;
    }
}
Run Code Online (Sandbox Code Playgroud)