2011-02-23 3 views
0

이상한 문제가 발생했습니다 (WinXP/.NET 2.0). 내가 다른 컨트롤에 자식으로이 UserControl을 추가하고 모든 자식 컨트롤 새로 고칠자식 UserControl에 대해 재정의 된 Refresh()가 호출되지 않습니다.

public override void Refresh() 
    { 
     DoSomeStuff(); 
     base.Refresh(); 
    } 

: 직접 새로 고침() 메서드를 호출

ParentControl : UserControl 
{ 
    [...] 

    public ParentControl (...) 
    { 
    [...] 

    UserControl ChildControl = ModelEngine.MainControl; // UserControl as mentioned above 
    this.Controls.Add(ChildControl); 

    [...] 

    ModelEngine.MainControl.Refresh(); //#1 
    this.Refresh(); // #2 
    } 
} 

을 (내가 새로 고침 (재정의하는의 WinForm의 UserControl을)를 사용 # 1) 잘 작동합니다. 부모 클래스 (# 2)에서 Refresh()를 호출 할 수 있으며 모든 자식 컨트롤에 대해 재귀 Refresh()가 트리거 될 것으로 예상됩니다 (MSDN http://msdn.microsoft.com/en-us/library/system.windows.forms.control.refresh.aspx에서 설명). 그러나 자식 컨트롤에서 재정의 된 Refresh()는 실행되지 않습니다. BTW : ControlStyles.UserPaint를 true로 설정해도 동작이 변경되지 않았습니다.

물론 Refresh()를 직접 (# 1처럼) 호출하거나 내 자신의 재귀 Refresh()를 작성할 수있다. 그러나이 버그가 내 코드의 어딘가에서 더 큰 문제의 표시인지 궁금합니다 ...

내 코드에 명백한 오류가 있습니까? 아니면 .NET의 일반적인 동작입니까? 이 페이지에서 말하듯이

답변

1

는 당신이 연결되는 :

참고 사항 파생 클래스에서 새로 고침을 재정의하는 경우 제어 있도록 기본 클래스의 Refresh 메서드를 호출해야합니다

을 상속자 및 그 하위 컨트롤이 무효화되고 및 다시 그려집니다.

Refresh() 메서드를 명시 적으로 호출해야합니다. 그렇지 않으면 이 아닌 기본 방법을 실행할 수 없으며 재정의 전체 개념이 손실됩니다.

+0

그의 ParentControl 클래스에서 그는 기본 Refresh() 메서드를 재정의하는 것처럼 보이지 않으므로 "this"를 사용할 때 기본 메서드를 호출하는 것처럼 보입니다. – Ocelot20

+0

그는 첫 번째 코드를 게시했습니다. – jimplode

+0

@ Ocelot20 사실입니다.하지만 생성자에서 가상 메서드를 호출하고 있습니다. http://stackoverflow.com/questions/119506/virtual-member-call-in-a-constructor – Jay

관련 문제