【发布时间】:2011-02-23 16:51:13
【问题描述】:
我遇到了一个奇怪的问题(WinXP / .NET 2.0)。我使用覆盖 Refresh() 的 WinForm UserControl:
public override void Refresh()
{
DoSomeStuff();
base.Refresh();
}
我将此 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 http://msdn.microsoft.com/en-us/library/system.windows.forms.control.refresh.aspx 中所述)。但是,不会执行子控件中被覆盖的 Refresh()。 顺便说一句:将 ControlStyles.UserPaint 设置为 true 并没有改变行为。
当然,我可以直接调用 Refresh()(如 #1)或编写自己的递归 Refresh()。但我想知道这个错误是否表明我的代码中某处存在更大的问题......
那么我的代码中是否存在明显错误,或者这是 .NET 的常规行为?
【问题讨论】:
标签: c# winforms user-controls refresh