Winforms,如何使元素的背景透明,如果它是放在网页浏览器?

plicqrtu  于 2023-02-19  发布在  其他
关注(0)|答案(1)|浏览(149)

我是个初学者。问题是:即使背景色被设置为"网页透明",它在某些元素(如网页浏览器)上实际上并不透明。看起来像是应用了母元素的颜色。有没有办法让它完全透明?或者在这种情况下我需要使用其他元素?我只需要显示文本并能够用鼠标拖动它。
祝你今天愉快!

如果将背景色设置为透明会以"人类理解"的方式影响它,那就太好了)

js5cn81o

js5cn81o1#

WinForms控件显示为透明的原因是“透明Windows窗体控件的背景由其父控件绘制”,如MS documentation中所解释的,这是正确的。这意味着父控件的背景将被绘制到标签 * 中,即使在标签 * 之间有另一个控件(您提到的Web浏览器)。
补救方法是更改Label控件本身的 shape,方法是分配一个不包括透明像素的可绘制Region

public partial class MainForm : Form
{
    public MainForm()
    {
        InitializeComponent();

        // Change shape of Label control, removing transparent pixels.
        label1.BackColor = Color.Transparent;
        Bitmap bitmap = new Bitmap(label1.Width, label1.Height);
        label1.DrawToBitmap(bitmap, label1.ClientRectangle);
        Region region = new Region(label1.ClientRectangle);
        for (int x = 0; x < label1.Width; x++) for (int y = 0; y < label1.Height; y++)
            {
                if (bitmap.GetPixel(x, y).A == 0)
                {
                    region.Exclude(new Rectangle(x, y, 1, 1));
                }
            }
        label1.Region = region;
    }
}

  • 您说您想要拖动它,因此请注意,以这种方式编写的控件只会检测到在控件中仍然 * 存在 * 的区域(即文本)上的鼠标单击。但是,这里有一个透明的、可拖动的Label元素的示例解决方案,您可以随意使用clone进行试验。*

相关问题