我是C#的新手,但我已经用VB6编程了很长时间。我有一个非常简单的项目,运行没有任何错误。然而,有一个问题,它与Windows本身有关。如果我打开任何窗口(来自任何其他程序)并且该窗口与我的应用程序重叠...当我关闭“其他窗口”时,我的应用程序窗口不会重新绘制与“其他窗口”重叠的部分。
只要为Windows Vista启用Bubbles屏幕保护程序,就会发生同样的事情。当我摇动鼠标取消屏幕保护程序时,猜猜是什么?我的窗户周围散落着气泡。在VB中,我们有一个简单的“Window.Refresh”,瞧!但是在C#中,这不起作用。我已经搜索了论坛,似乎提到了“刷新线程”。我现在有点困惑。为什么事情不能简单?
答案 0 :(得分:2)
您可以致电Form.Invalidate以使表单的客户区无效。这将导致它接收绘制消息,并重绘自己。
这类似于VB6 Refresh方法。
但是,这应该会自动发生。但是,如果您的应用程序在UI线程中进行了一些处理,则会阻止它在完成工作之前处理其消息。如果是这种情况,您应该考虑使用BackgroundWorker(或其他方法)将工作推送到后台线程。
答案 1 :(得分:0)
在C#中重绘表单时,您不需要做什么特别的事情(当您将窗口重新置于顶部时,表单应该重绘得很好)。
你有任何第三方控制吗? Control.Refresh()确实存在于C#中,如果您应该能够从表单本身(通常在表单的代码隐藏中this.Refresh()
)或任何有子项的控件(如Panel)中调用它。