【问题标题】:Foreach control in tabpage标签页中的 Foreach 控件
【发布时间】:2015-11-04 18:10:38
【问题描述】:

所以我有这个带有背景的表格。问题是我的性能下降很大。所以有人告诉我只需使用图片框并使用“设置为后退”即可获得相同的效果。

现在的问题是我的控件的背景不再透明,而是和表单背景一样。

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

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

但现在我必须为我的所有 20 个控件编写这两行代码。

所以我尝试使用以下foreach语句:

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

但是现在我的控件只有一半的背景色是透明的。

例如:

Label1 是透明的

label2 不是

button1 不是

button2 是透明的

我做错了什么?

【问题讨论】:

  • 我已经删除了我的答案,因为它并没有真正解决问题,选项卡控件也可能是问题的一部分。 winforms 中的透明度是一种 hack,它通过获取其背后控件的背景颜色来工作
  • 是的,这就是我尝试更改父级的原因,但不想要我现在拥有的那 40 行代码。无论如何感谢您的帮助
  • 当背景图像较大或像素格式与视频适配器的像素格式不匹配或必须调整大小以适应窗口时,透明效果会变得非常昂贵。通常这三个都是一个问题。 Winforms 让忽略这些细节变得非常容易,它太有帮助了。当您关心响应式 UI 时,您不能忽略它们。编写代码以预先生成位图,以便绘画变得便宜。它需要与表单的 ClientSize 匹配,因此不必调整大小并使用 32bppPArgb 像素格式,比其他格式快十倍。
  • Dankje Hans ;) 我真的不知道会这么容易。我只是把我的图片大小改成了表格大小,就和用图片框一样流畅

标签: c# winforms


【解决方案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();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    • 2014-06-11
    • 1970-01-01
    相关资源
    最近更新 更多