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; } } |