C# tabpage中的Foreach控件

C# tabpage中的Foreach控件,c#,winforms,C#,Winforms,我有一张有背景的表格。问题是,就性能而言,我的收入大幅下降。所以有人告诉我,只要用一个图片盒,然后用“设置到后面”就可以得到同样的效果 现在的问题是,我的控件的背景不再是透明的,而是与表单背景相同 所以有人告诉我使用这个代码: control.Parent = pictureboxBackground; control.BackColor = Color.Transparent; 但是现在我必须为我所有的20个控件编写这两行代码 因此,我尝试使用以下foreach语句: foreach (Co

我有一张有背景的表格。问题是,就性能而言,我的收入大幅下降。所以有人告诉我,只要用一个图片盒,然后用“设置到后面”就可以得到同样的效果

现在的问题是,我的控件的背景不再是透明的,而是与表单背景相同

所以有人告诉我使用这个代码:

control.Parent = pictureboxBackground;
control.BackColor = Color.Transparent;
但是现在我必须为我所有的20个控件编写这两行代码

因此,我尝试使用以下foreach语句:

foreach (Control but in tabPage2.Controls)
{
    but.Parent = pictureBox1;
    but.BackColor = Color.Transparent;
}   
但现在我的控件只有一半的背景色是透明的

例如:

标签1是透明的

label2不是

按钮1不是

按钮2是透明的

我做错了什么?

试试这个:

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

Application.DoEvents();


我已经删除了我的答案,因为它并没有真正解决问题,选项卡控件也可能是问题的一部分。winforms中的透明性是一种黑客行为,它通过获取控件背后的背景颜色来工作是的,这就是为什么我试图更改父级,但我不想要我现在拥有的40行代码。无论如何,感谢您的帮助当背景图像较大或像素格式与视频适配器的像素格式不匹配或必须调整大小以适应窗口时,稀疏效果会变得非常昂贵。通常这三个都是问题。Winforms很容易忽略这些细节,它太有用了。当您关心响应用户界面时,不能忽略它们。编写代码提前生成位图,这样画图就便宜了。它需要与表单的ClientSize相匹配,这样就不必调整大小并使用32bppPArgb像素格式,它比其他格式快十倍。Dankje Hans;)我真的不知道会这么容易。我只是把图片的大小改成了表格的大小,它就像用图片盒一样平滑
foreach (Control but in tabPage2.Controls)
{
  but.Parent = pictureBox1;
  but.BackColor = Color.Transparent;
  but.Invalidate();
}