我有一个VS2010解决方案(尝试模仿我的主要问题),它有2个项目,每个项目每个都有一个窗口。 Mainform 位于project_1中,它引用了项目2,其中定义了 ChildForm 。
我在MainForm上有一个按钮,其按钮点击事件会创建一个 ChildForm 并显示。显示ChildForm时,我可以调用任何菜单命令(实现每个菜单命令以显示消息框),这些命令在 MainForm 上定义,没有任何问题。
但是,另一方面,我按原样保留所有代码,并使用this.Invalidate()覆盖ChildForm的OnPaint方法,如下所示
protected override void OnPaint(PaintEventArgs e)
{
this.Invalidate();
base.OnPaint(e);
}
我运行了可执行文件,它打开了我的MainForm并单击按钮打开我的ChildForm,然后单击其中一个Menu命令来引发一个消息框,然后我发现MainForm和ChildForms都被冻结并被挂起而没有任何回应。
任何人都可以对重写OnPaint方法的问题有所了解,该方法每次都执行this.Invalidate()行并建议如何解决此问题。
此致 库马尔
答案 0 :(得分:1)
您拨打了Invalidate()
,它会触发OnPaint
,OnPaint
来电Invalidate()
再次......这是一个调用Invalidate()
和{的循环{1}} - >您的用户界面已冻结。
解决方案是你必须更清楚地说明你想要什么,以及你在这里覆盖OnPaint
的目的。