我可以使用C#在Visual Studio 2005中创建透明按钮吗?

时间:2008-10-14 16:01:01

标签: visual-studio visual-studio-2005 user-interface button transparent

我有一个用户界面,需要在C#项目中放置一些圆形按钮,其背后有一些数据。按钮是System.Windows.Forms.buttons,我使用了透明的GIF图像来创建它们。但是,透明区域不透明。我在网上寻找参考资料,但没有找到任何关于如何正确做到这一点的建议。有一些提到在Visual Studio 2008中这样做但我需要在2005年保留这个项目。感谢任何帮助或建议。

8 个答案:

答案 0 :(得分:1)

我很确定你需要使用带有WinForms的PNG来获得图像透明度。我知道我已成功使用它们了。

编辑:当我使用PNG时,我将它们与Image控件叠加到Form1.BackgroundImage上;我没有在按钮中使用它们。

我认为最好的办法是从使用按钮控件切换到使用图像控件。您也可以尝试将按钮样式更改为扁平(我认为它是扁平的,也许是其他样式之一)并看看您是否可以获得您想要的效果。

答案 1 :(得分:1)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing;

public class TransparentControl : Control
{
    public TransparentControl()
    {
        SetStyle(ControlStyles.SupportsTransparentBackColor, true);
        SetStyle(ControlStyles.Opaque, true);
        SetStyle(ControlStyles.ResizeRedraw, true);
        this.BackColor = Color.Transparent;
    }

    protected override void OnPaint(PaintEventArgs pevent)
    {
        Graphics g = pevent.Graphics;
        g.DrawRectangle(Pens.Black, this.ClientRectangle);
    }


    protected override void OnPaintBackground(PaintEventArgs pevent)
    {
        // don't call the base class
        //base.OnPaintBackground(pevent);
    }


    protected override CreateParams CreateParams
    {
        get
        {
            const int WS_EX_TRANSPARENT = 0x20;
            CreateParams cp = base.CreateParams;
            cp.ExStyle |= WS_EX_TRANSPARENT;
            return cp;
        }
    }

    // rest of class here...
}

答案 2 :(得分:1)

试试这个:

        Bitmap temp = new Bitmap(button1.Image);

        temp.MakeTransparent(Color.Black); //your transparent color, in this case black

        button1.Image = (Image) Logo;

        temp.Dispose();

        temp = null;

答案 3 :(得分:1)

只需将Button的FlatStyle property设置为“Flat”......即可!我知道这适用于PNG,但我没有使用GIF进行测试。

答案 4 :(得分:0)

您需要将按钮的BackColor属性设置为“Transparent”。

Button1.BackColor = System.Drawing.Color.Transparent;

答案 5 :(得分:0)

创建一个派生自按钮的类并放入此代码。

    protected override CreateParams CreateParams
    {
        get
        {
            const int WS_EX_TRANSPARENT = 0x20;
            CreateParams cp = base.CreateParams;
            cp.ExStyle |= WS_EX_TRANSPARENT;
            return cp;
        }
    }

和创建方法

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

答案 6 :(得分:0)

我正在使用Visual Studio 2005并尝试按照上面的示例进行操作,但它不起作用(create方法中的代码段)。 我有一个表格的背景,我正在尝试创建斜面透明按钮。

目前插入上面的代码使我的背景透明,我的按钮全部为白色。

这是我的代码片段

       Bitmap mainFormBackground = (Bitmap)Image.FromFile("background.jpg");
        this.BackgroundImage = mainFormBackground;
        this.BackColor = Color.Black;
        this.ForeColor = Color.White;

添加一些按钮

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

我甚至尝试过

         btnName.BackColor = Color.Transpare;

这也不起作用

答案 7 :(得分:0)

以下答案在Visual Studio 2012中得到验证,并与backgroundImage格式BMP,GIF,PNG以及JPG一起使用;由MS Paint创建。

通过按钮显示背景:

转到按钮的属性窗口。然后更改FlatStyle和BackColor,如下图所示:

The FlatStyle is to be chosen as Flat

The color is to be chosen from Web Tab

注意:颜色将从Web Tab中选择,FlatStyle将被选为Flat。

但在此之后,按钮将是透明的,直到鼠标不悬停或选择或按下它。在这种情况下,它会呈现一些不透明的颜色。如果要使其始终透明,请按照以下图像将相应的颜色更改为透明,如前所述。要更改的颜色是:' MouseOverBackColor' &安培; ' MouseDownBackColor'

enter image description here

enter image description here

注意:如果您选择始终透明,如图所示,按钮的外观将不会发生变化!

希望它会对你有所帮助。

祝你好运!