2016-08-17 2 views
1

현재 C#의 Visual Studio에서 사용자 정의 된 UserControl의 font 속성을 재정의하려고합니다. 이 속성은 사용자 정의 컨트롤의 레이블 글꼴을 가져와 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을 추가 할 때. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+0

용의자 ** label1 **은 null입니다. – MickyD

+0

생성자를 확인했습니다. 나는 그렇게 생각하지 않는다. InitializeComponent()가 실행됩니다. 그리고 UserControl Text 속성을 재정의하고 레이블의 Text 속성을 반환 할 수있었습니다. –

+0

다음을 추가하십시오. if (value! = null) {label1.Font = value; }'. – Jackdaw

답변

2

처음에는 혼자서 잘못 된 것이 무엇인지 알아 낸 후 나 자신의 질문에 대답하는 것이 유감스럽게 생각합니다. 하지만 문제는 희귀하지 않을 것입니다. 그래서 대답은 다음과 같습니다.

우선 먼저 costomized UserControl을 만들 때 먼저 작업중인 UserControl이 만들어지고 그 다음에 컨트롤이 생성됩니다. UserControl. UserControl에서 Font 속성을 구현할 때 InitializeComponent()가 아직 실행되지 않는 동안 get-Accessor가 실행되어 Font 속성이 다른 Font 속성을 참조 할 때 VS의 크래시가 발생합니다. 코드는 다음과 같이 보입니다.

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