C# 未为子UserControl调用重写的刷新()

C# 未为子UserControl调用重写的刷新(),c#,winforms,user-controls,refresh,C#,Winforms,User Controls,Refresh,我遇到了一个奇怪的问题(WinXP/.NET2.0)。我使用覆盖Refresh()的WinForm UserControl: 我将此UserControl作为子控件添加到另一个控件,并希望刷新所有子控件: ParentControl : UserControl { [...] public ParentControl (...) { [...] UserControl ChildControl = ModelEngine.MainControl; // UserC

我遇到了一个奇怪的问题(WinXP/.NET2.0)。我使用覆盖Refresh()的WinForm UserControl:

我将此UserControl作为子控件添加到另一个控件,并希望刷新所有子控件:

ParentControl : UserControl
{
  [...]

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

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

    [...]

    ModelEngine.MainControl.Refresh(); //#1
    this.Refresh(); // #2
  }
}
直接调用Refresh()方法(#1)效果很好。 我希望可以对父类(#2)调用Refresh(),这将触发对所有子控件的递归Refresh()(如MSDN中所述)。但是,不会执行子控件中被重写的Refresh()。 顺便说一句:将ControlStyles.UserPaint设置为true不会改变行为

当然,我可以直接调用Refresh()(如#1)或编写自己的递归Refresh()。但我想知道这个bug是否是我代码中某个更大问题的迹象


那么,我的代码中是否存在明显的错误,或者这是.NET的常规行为

正如您链接到的页面中所述:

继承人须知

在派生数据库中重写刷新时 类,请确保调用基 类的刷新方法,以便 其子控件将无效 并重新绘制


必须显式调用base
Refresh()
方法。否则,将无法不运行基方法,覆盖的整个概念将丢失。

在他的ParentControl类中,他似乎没有覆盖基Refresh()方法,因此看起来他在使用“this”时调用了基方法。@Ocelot20这是真的,但他在构造函数中调用了一个虚拟方法。看我的道歉,我不知道这是一个虚拟的方法。
ParentControl : UserControl
{
  [...]

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

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

    [...]

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