0

我有一个 VS2010 解决方案(尝试模仿我的主要问题),它有 2 个项目,每个项目都有一个窗口。Mainform在 project_1 中,它引用了定义ChildForm的项目 2。

我在 MainForm 上有一个按钮,其按钮单击事件会创建一个ChildForm并显示。在显示 ChildForm 时,我可以调用在MainForm上定义的任何菜单命令(每个菜单命令都被实现以显示一个消息框),而不会出现任何问题。

但是,另一方面,我保持所有代码不变,并用 this.Invalidate() 覆盖 ChildForm 的 OnPaint 方法,如下所示

protected override void OnPaint(PaintEventArgs e)
    {
        this.Invalidate();
        base.OnPaint(e);
    }

我运行可执行文件,它打开了我的 MainForm 并单击按钮以打开我的 ChildForm,然后单击其中一个菜单命令以引发一个消息框,然后我发现 MainForm 和 ChildForms 都被冻结并被挂起而没有任何响应。

任何人都可以阐明重写 OnPaint 方法的问题所在,该方法每次都执行 this.Invalidate() 行,并建议我如何解决这个问题。

问候,库马尔

4

1 回答 1

1

您调用Invalidate()了它将触发OnPaintOnPaint调用Invalidate()并再次调用...这是一个调用循环,Invalidate()并且OnPaint -> 您的 UI 已冻结。

解决方案是您必须更清楚地说明您想要什么以及在OnPaint这里覆盖的目的。

于 2013-09-24T07:35:52.013 回答