이상한 문제가 발생했습니다 (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의 일반적인 동작입니까? 이 페이지에서 말하듯이
그의 ParentControl 클래스에서 그는 기본 Refresh() 메서드를 재정의하는 것처럼 보이지 않으므로 "this"를 사용할 때 기본 메서드를 호출하는 것처럼 보입니다. – Ocelot20
그는 첫 번째 코드를 게시했습니다. – jimplode
@ Ocelot20 사실입니다.하지만 생성자에서 가상 메서드를 호출하고 있습니다. http://stackoverflow.com/questions/119506/virtual-member-call-in-a-constructor – Jay