2012-01-10 8 views
0

CAB 및 infragistics를 사용하고 있습니다. 양식에서 스플리터와 사용자 정의 컨트롤에 그리드, 버튼, 레이블이 있습니다 ...이 스플리터 내에서 런타임에 열리면 사용자 컨트롤이 올바르게 그려지지 않습니다. 여기에 설명 된대로 win7 x64에서는이 문제가 알려져 있으며 this archive link from the Component Factory website cache에 있습니다. 생성자 (생성자 호출의 InitializeComponent) 및 온로드 방법에서 형태 구성 요소를 초기화 할 때이 방법이 호출되는 CAB 사용시CAB를 사용하여 win7 x64에서 스플리터 컨테이너 페인트 문제를 해결합니다

protected override void OnSizeChanged(EventArgs e) 
    { 
     if (Handle != null) 
      BeginInvoke((MethodInvoker)delegate 
      { base.OnSizeChanged(e); }); 
    } 

용액의 문제점 : 상기 항목에 제공된 해결책은 OnSizeChanged 메소드를 재정의 이루어져 Handle 속성에 액세스 할 때 그 값이 null 인 경우가 생성되기 때문에 _presenter가 아직 설정되어 있지 않고 그 값이 널 (null)이며 axception가 발생합니다 여기에,

protected override void OnLoad(EventArgs e) 
    {    
     _presenter.OnViewReady(); 
     base.OnLoad(e);    
    } 

라고합니다.

이 문제를 해결하려면 어떻게해야합니까?

감사합니다.

답변

1

다음과 같이 간단한 솔루션은 InitilizeComponent 메소드가 완료되었는지 필드 (_isInitilizeCompleted)를 표시해야하고 일하기 OnSizeChanged 방법을 수정할 수 있습니다 : 나는 테스트하지 않았습니다

protected override void OnSizeChanged(EventArgs e) 
{ 
    if (Handle != null && _isInitilizeCompleted) 
     BeginInvoke((MethodInvoker)delegate 
     { base.OnSizeChanged(e); }); 
} 

을했지만 작동한다 , 물론 OnSizeChanged가 InitializeComponent 동안 호출 될 필요가 없다면.

0

깃발을 사용하는 것이 좋습니다. Handle 속성을 테스트하기 전에 플래그 테스트를 수행해야합니다.

protected override void OnSizeChanged(EventArgs e) 
    { 
     if (_isInitilizeCompleted && Handle != null) 
      BeginInvoke((MethodInvoker)delegate 
      { base.OnSizeChanged(e); }); 
    }