C#this.Invalidate()阻止父表单访问

时间:2013-09-24 07:33:31

标签: c# winforms controls invalidation

我有一个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()行并建议如何解决此问题。

此致 库马尔

1 个答案:

答案 0 :(得分:1)

您拨打了Invalidate(),它会触发OnPaintOnPaint来电Invalidate()再次......这是一个调用Invalidate()和{的循环{1}} - >您的用户界面已冻结。

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