C#UserControl覆盖字体

C# UserControl override font

我目前正试图在C#中的Visual Studio中覆盖自定义UserControl的font属性。该属性应仅使用用户控件中标签的字体,而忽略UserControl的font属性。

代码:

1
2
3
4
5
6
7
8
9
10
11
[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崩溃并重新启动。我在做什么错?


起初,我想对不起自己在发现自己出了什么问题之后自己回答自己的问题。但我认为这个问题不会罕见,因此答案如下:

首先,当您创建自己的定制化UserControl时,请记住,首先创建要使用的UserControl,然后再创建UserControl中的控件。当在UserControl中实现Font属性时,将在不执行InitializeComponent()的情况下执行get-Accessor,这将导致VS崩溃,因为Font属性以我的方式引用了另一个Font属性。代码应该是这样的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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;
    }
}