我有一個控件可以在我的GUI中疊加多個C#用戶控件。這種控制有以「灰色出」的GUI的部分的半透明背景和類看起來somethink這樣的:c#Winforms:刷新一部分GUI(包含一個或多個控件)
public greyOutControl: UserControl
{
// Usual stuff here
protected overide OnPaint()
{
paintBackround();
base.OnPaint();
}
}
目前有時被抓住在一個循環中不斷控制重新繪製背景,使得半透明顏色顯得越來越不透明。
我對解決這個問題的想法是以下(從廣義上講):
1)確定哪些控制greyOutControl是對 2頂部)調用刷新()對這些控件更新顯示 3)繼續繪製greyOutControl。
我的問題是:如何確定哪些控件與greyOutControl重疊?或者是否有方法可以只刷新greyOutControl覆蓋的GUI部分?
調用Invalidate()的問題是Invalidate不能保證立即被調用,而是文檔聲明它會在下一個便捷的時間被調用。在OnPaint()函數中,在嘗試添加半透明疊加層之前,完全渲染背景非常重要。因此爲什麼刷新()是首選。 – 2009-05-28 14:33:21