2016-08-17 3 views
1

В настоящее время я пытаюсь переопределить свойство шрифта настраиваемого UserControl в Visual Studio на C#. Свойство должно просто взять шрифт метки в пользовательском элементе управления и игнорировать свойство шрифта UserControl.C# UserControl override font

Код:

[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

Я подозреваю ** label1 ** is null – MickyD

+0

Я проверил конструктор. Я так не думаю. Выполняется инициализацияComponent(). И я смог переопределить свойство Text для UserControl и вернуть свойство Text метки. –

+0

Попробуйте добавить 'if (value! = Null) {label1.Font = value; } '. – Jackdaw

ответ

2

Сначала я хочу сказать, извините, что сам отвечу на свой вопрос, узнав, что пошло не так. Но я думаю, что проблема будет не редка, так что вот ответ:

Прежде всего, когда вы создаете собственный Costomized UserControl, имейте в виду, что сначала создается UserControl, с которым вы работаете, и затем элементы управления в UserControl. При реализации свойства Font в UserControl 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; 
     lb_Solution.Font = m_Font; 
    } 
}