gpt4 book ai didi

c# - C# 中 Overlapped PictureBox 的透明度问题

转载 作者:太空狗 更新时间:2023-10-29 23:58:40 31 4
gpt4 key购买 nike

我在面板中显示 PictureBox 重叠,因为每个 PictureBox 都被使用作为一层。第一次定义 PictureBox 并将其添加到面板时,它的背景颜色是透明的,它的图像是空的。

问题是,底层看不到,透明图片,显示面板的地面。异常(exception)的是,底部的 PictureBox 图像可见。

我已经尝试过使用其他控件(如标签)来实现它。问题无法解决:(

谢谢。

最佳答案

这是因为,如果我没记错的话,将背景颜色设置为透明(它的实际值为空,对吧?)并不是真正透明的。 Windows 所做的是查看控件的父容器的背景颜色并将控件背景颜色设置为该颜色。

您可以看到这种情况尤其发生在面板上。没有内容,设置为透明的面板应该让你看到它们后面,对吧?错误的。如果您将一个面板放在一堆文本框控件之上,并将面板设置为透明,您将看不到它后面的文本框。

相反,为了获得真正的透明度,您必须为相关控件重载 OnPaintBackground,并且基本上什么都不做(也不要调用 base.OnPainBackground!)...可能不止于此, 但这里是我们在这里使用的有效 TransparentPanel 控件的示例:

public class TransparentPanel : System.Windows.Forms.Panel
{
[Browsable(false)]
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x20;
return cp;
}
}
protected override void OnPaintBackground(PaintEventArgs e)
{
// Do Nothing
}
}

我们已经成功地使用此类在过去的 Windows 窗体应用程序中创建了真正透明的面板。我们将其用作解决“右键单击上下文菜单出现在按钮控件顶部”问题的 hack。

关于c# - C# 中 Overlapped PictureBox 的透明度问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1234999/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com