winforms上的透明背景?

时间:2010-12-08 12:57:41

标签: c# winforms background transparent

我想让我的窗体透明,所以删除边框,控件和一切只留下表格框,然后我尝试将BackColor和TransparencyKey透明但它没有用,因为BackColor不接受透明色。搜索后我在msdn上找到了这个:

SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
this.BackColor = Color.Transparent;
this.TransparencyKey = BackColor;

不幸的是,它也没有用。我仍然得到灰色或任何其他选定的颜色背景。

我想做的就是让窗体变得透明,这样我就可以使用背景图像,就好像它是我的窗体一样。

我在这里搜索并看到了很多关于不透明度的主题,这不是我想要的,也看到了一些关于这种方法我正在尝试但尚未找到答案。

希望任何人都能照亮我的道路。

更新:

在问题解决后删除了图片

9 个答案:

答案 0 :(得分:65)

我之前使用过的方法是使用BackColor的野性颜色(右脑中没有人会使用的颜色),然后将透明度键设置为。

this.BackColor = Color.LimeGreen;
this.TransparencyKey = Color.LimeGreen;

答案 1 :(得分:21)

在Windows窗体中获取透明背景的简单解决方案是覆盖OnPaintBackground方法,如下所示:

protected override void OnPaintBackground(PaintEventArgs e)
{
    //empty implementation
}

(请注意,base.OnpaintBackground(e)已从函数中删除)

答案 2 :(得分:6)

我已尝试过上述解决方案(以及其他帖子中的其他解决方案)。

就我而言,我是通过以下设置完成的:

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

        SetStyle(ControlStyles.SupportsTransparentBackColor, true);
        this.BackColor = Color.Transparent;

        // Other stuff
    }

    protected override void OnPaintBackground(PaintEventArgs e) { /* Ignore */ }
}

正如您所看到的,这是以前给出的答案的混合。

答案 3 :(得分:6)

这是我的解决方案:

在构造函数中添加以下两行:

        this.BackColor = Color.LimeGreen;
        this.TransparencyKey = Color.LimeGreen;

在表单中,添加以下方法:

    protected override void OnPaintBackground(PaintEventArgs e)
    {
        e.Graphics.FillRectangle(Brushes.LimeGreen, e.ClipRectangle);
    }

请注意,此图形不仅在框架内完全透明,而且您还可以单击它。但是,在它上面绘制图像并使表格能够被拖到任何地方以创建自定义形状的形式可能会很酷。

答案 4 :(得分:4)

我的解决方案非常接近Joel(Not Etherton,只是简单的Joel):

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

        SetStyle(ControlStyles.SupportsTransparentBackColor, true);
        this.BackColor = Color.Transparent;
        this.TransparencyKey = Color.Transparent; // I had to add this to get it to work.

        // Other stuff
    }

    protected override void OnPaintBackground(PaintEventArgs e) { /* Ignore */ }
}

答案 5 :(得分:2)

我在VS2013中绘制了一个带有“透明”背景色的闪屏(32bpp BGRA),并将一个pictureBox放在一个表格中供显示。对我来说,上述答案的组合起作用了:

    public Form1()
    {
        InitializeComponent();

        SetStyle(ControlStyles.SupportsTransparentBackColor, true);
        this.BackColor = this.pictureBox1.BackColor;
        this.TransparencyKey = this.pictureBox1.BackColor;
    }

因此,请确保在任何地方使用相同的BackColor,并将该颜色设置为TransparencyKey。

答案 6 :(得分:2)

我几乎尝试了所有这些。但仍然行不通。 最后我发现这是因为24bitmap问题。如果您尝试了一些小于24位的位图。上述方法中的大部分都应该有效。

答案 7 :(得分:1)

对我有用的是使用特定的颜色而不是.png的真实能力来表示透明度。

所以,你可以做的是拍摄背景图片,并用特定颜色绘制透明区域(洋红色似乎总是适合我......)。

将图像设置为表单的BackgrounImage属性,并将颜色设置为表单的TransparencyKey。无需更改Control的样式,也不需要BackColor。

我现在已经尝试过,它对我有用......

答案 8 :(得分:-3)

它是否与表格/背景的“不透明度”有关?你尝试过opacity = 0

吗?

另请参阅此CP article是否有帮助: