我碰到一個奇怪的問題(操作系統/ .NET 2.0)。我用它覆蓋刷新(一個WinForm用戶控件):重寫刷新()不要求孩子用戶控件
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
}
}
直接調用刷新()方法( #1)正常工作。 我希望我可以在父類調用刷新()(#2),這將觸發一個遞歸刷新()上的所有子控件(如MSDN http://msdn.microsoft.com/en-us/library/system.windows.forms.control.refresh.aspx解釋)。但是,子控件中重寫的Refresh()不會被執行。 順便說一下:將ControlStyles.UserPaint設置爲true並不會改變行爲。
當然,我可以直接調用刷新()(如#1)或寫我自己的遞歸刷新()。但我想知道這個錯誤是什麼地方在我的代碼一個更大的問題的指示......
那麼,有一個明顯的錯誤在我的代碼或這是.NET的常規行爲?
在他ParentControl課上,他似乎並沒有覆蓋基刷新()方法,所以它看起來像他*是*使用「this」的時候調用基方法。 – Ocelot20 2011-02-23 17:03:38
他確實,他發佈的第一位代碼! – jimplode 2011-02-23 17:04:41
@ Ocelot20這是真的,但他正在構造函數中調用一個虛擬方法。看到http://stackoverflow.com/questions/119506/virtual-member-call-in-a-constructor – Jay 2011-02-23 19:47:42