2011-02-07 110 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())或任何有孩子的控件(如面板)。