2015-10-16 110 views
3

所以我有這種形式的背景。問題在於我有一個巨大的下降,性能明智。所以有人告訴我只使用一個picturebox並使用「Set back」來獲得相同的效果。在tabpage中的foreach控件

現在的問題是我的控件的背景不再透明,但與表單背景相同。

所以someome告訴我使用此代碼:

control.Parent = pictureboxBackground; 
control.BackColor = Color.Transparent; 

但現在我必須寫的代碼,這兩條線來進行所有的20所控制的。

於是,我就用下面的foreach語句:

foreach (Control but in tabPage2.Controls) 
{ 
    but.Parent = pictureBox1; 
    but.BackColor = Color.Transparent; 
} 

但現在只有我的控制backcolors的一半是透明的。

例如:

Label1的是透明

LABEL2不

Button1的不

BUTTON2是透明

我在做什麼錯?

+0

我已經刪除了我的答案,因爲它並沒有真正解決問題,標籤控制也可能是問題的一部分。在winforms中的透明度是一種黑客攻擊,它通過獲取控件背後的背景顏色來工作 – Sayse

+0

是的,這就是爲什麼我嘗試更改父項,但不想要我現在擁有的40行代碼。感謝您的幫助 –

+0

當背景圖像較大或像素格式與視頻適配器的像素格式不匹配或需要調整大小以適應窗口時,透明效果變得非常昂貴。通常這三個都是問題。 Winforms使*非常容易忽略這些細節,這太有幫助了。當您關心響應式用戶界面時,您無法忽略它們。編寫代碼以生成位圖,以便繪畫變得便宜。它需要與表單的ClientSize匹配,因此它不必調整大小並使用32bppPArgb像素格式,它比其他格式快十倍。 –

回答

1

試試這個:

foreach (Control but in tabPage2.Controls) 
{ 
    but.Parent = pictureBox1; 
    but.BackColor = Color.Transparent; 
} 

Application.DoEvents(); 

foreach (Control but in tabPage2.Controls) 
{ 
    but.Parent = pictureBox1; 
    but.BackColor = Color.Transparent; 
    but.Invalidate(); 
}