2015-10-16 111 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(); 
}