2011-02-07 105 views
2

我是C#的新手,但我一直使用VB6编程很长一段时间。我有一个非常简单的项目,运行没有任何错误。但是有一个问题,它与Windows本身有关。如果我打开任何窗口(来自任何其他程序)并且该窗口与我的应用程序重叠...当我关闭“其他窗口”时,我的应用程序的窗口不会重新绘制与“其他窗口”重叠的部分。窗体不重新绘制

每当Bubbles屏幕保护程序出现在Windows Vista上时,都会发生同样的事情。当我轻敲鼠标取消屏幕保护程序时,猜猜看是什么?我的窗户上散落着泡沫。在VB中,我们有一个简单的“Window.Refresh”,瞧!但在C#中,这不起作用。我已经搜遍论坛,似乎提到了“刷新主题”。在这一点上我有点困惑。为什么不能简单的事情?

+2

您的应用程序是否在执行任何操作,或只是等待用户输入? – cjk 2011-02-07 17:41:53

回答

2

您可以拨打Form.Invalidate使表格的客户区域无效。这会导致它收到一条画信息,并重新绘制自己。

这与VB6 Refresh方法类似。

但是,这应该会自动发生。但是,如果您的应用程序正在UI线程中进行一些处理,则它将阻止它在处理完成之前处理其消息。如果是这种情况,您应该考虑使用BackgroundWorker(或其他方法)将工作推送到后台线程。

0

没有什么特别的,你需要做的重绘在C#中的窗体(窗体应该重新绘制好,当你把窗口回到顶部)。

你有任何第三方控件吗? Control.Refresh()确实存在于C#中,你应该能够从窗体本身调用它(通常在窗体的代码隐藏中为this.Refresh())或任何有孩子的控件(如面板)。