2015-01-06 2 views
2

기본 폼을 상속 한 폼이 있습니다. baseform_loadchildform_load 이벤트에는 모두 코드가 있습니다.WinForms Form_Load가 호출되지 않았습니다.

public partial class BaseForm : Form 
{ 
    public BaseForm() 
    { 
     InitializeComponent(); 
    } 

    private void BaseForm_Load(object sender, EventArgs e) 
    { 
     //Do stuff... 
    } 
} 

을 그리고 자식 폼은 다음과 같습니다 :

은 BaseForm은 다음과 같이 보이는 baseform의로드 이벤트가 명시 적으로로드되지

public partial class ChildForm : BaseForm 
{ 
    public ChildForm() 
    { 
     InitializeComponent(); 
    } 

    private void ChildForm _Load(object sender, EventArgs e) 
    { 
     //Do stuff... 
    } 
} 

. 이벤트 처리기는 양식 디자이너를 통해 작성되기 때문에 사용할 수 있습니다.

나는 다음과 같은 방법으로 내 폼을 엽니 다

public static DialogResult ShowForm<T>(this Form form, bool canShowForm) where T : Form, new() 
{ 
    return new T().ShowDialog(form); 
} 

모든 것이 잘 작동했지만, baseformchildform로드 이벤트에서 갑자기, 아니 모든 코드가 호출되고있다.

참고 : childform 생성자에서 InitializeComponent을 호출하고 예외를 발생시키지 않습니다.

무엇이 잘못 되었나요?

+3

: 같은

뭔가? 원인을 결정하는 데 충분한 정보가 없습니다. – Sayse

+0

직접 form_load 이벤트를 정의하고 정의해야합니다. –

+0

추가 정보 –

답변

5

(기본 클래스 'InitializeComponents을 (를) 재정의 함으로 인해) 이벤트 처리기가 구독되지 않은 것 같습니다. 생성자이 추가 :

this.Load += BaseForm_Load; 

프로 팁 : 당신은 최우선 Form.OnLoad에보고 할 수 있습니다. 그렇게하면 파생 클래스에서 OnLoad을 자동으로 호출하므로 이벤트 구독이 필요하지 않습니다. 당신은 모든 관련 정보가 있습니다 ..`은`baseform`s로드 이벤트를 호출 childform` 않습니다를 포함해야

protected override void OnLoad(EventArgs e) 
{ 
    base.OnLoad(e); // let the base class do it's OnLoad 

    //Do your own stuff... 
} 
+0

이 방법을 사용하고 있었지만 작동하지 않았습니다. 코드를 통해 디버깅 할 때 OnLoad 메서드가 호출되지 않았습니다 (BaseForm 또는 ChildForm). –

+0

코드를 시도했지만 작동하지 않습니다 ... 파생 된 부분 클래스가 손상되지 않았습니까? 나는 항상 디자이너가 아닌 기본 폼을 선호한다. –

+0

내 코드가 지금까지 제대로 작동했습니다! 너를 해산시켜 무슨 뜻이야? 편집 : 코드를 OnShown 메서드로 옮기더라도 작동하지 않습니다. –

관련 문제