12

我是 C# 的新手。我想创建一个不可见的按钮,但它们在 C# windows 窗体应用程序中是可点击的。有办法吗?我尝试将 BackColor 设置为透明,但这并没有改变它是透明的事实

4

5 回答 5

30

试试这个很简单。

单击要使其透明的按钮。FlatStyle从 Properties 中选择并将其设置为popup 现在将BackColor属性更改为Transparent

这将使按钮透明。

但是,如果您想让它在PictureBox此方法上透明,则无法使用..

它仅适用于普通背景和背景图像。希望它有效....

于 2015-07-29T10:09:10.937 回答
5
buttonLink.FlatStyle = FlatStyle.Flat; 
buttonLink.BackColor = Color.Transparent;
buttonLink.FlatAppearance.MouseDownBackColor = Color.Transparent;
buttonLink.FlatAppearance.MouseOverBackColor = Color.Transparent;
于 2013-03-31T23:45:31.763 回答
0

参考:

原始文章和代码可以在以下位置找到:

当鼠标悬停在禁用的控件上时显示工具提示

@ CodeProject by tetsushmz

代码:

public class TransparentSheet : ContainerControl
{
    public TransparentSheet()
    {
        // Disable painting the background.
        this.SetStyle(ControlStyles.Opaque, true);
        this.UpdateStyles();

        // Make sure to set the AutoScaleMode property to None
        // so that the location and size property don't automatically change
        // when placed in a form that has different font than this.
        this.AutoScaleMode = AutoScaleMode.None;

        // Tab stop on a transparent sheet makes no sense.
        this.TabStop = false;
    }

    private const short WS_EX_TRANSPARENT = 0x20;

    protected override CreateParams CreateParams
    {
        [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]
        get
        {
            CreateParams l_cp;
            l_cp = base.CreateParams;
            l_cp.ExStyle = (l_cp.ExStyle | WS_EX_TRANSPARENT);
            return l_cp;
        }
    }
}

解释:

您需要做的是使用给定的控件作为您禁用的TextBox(您在评论之一中提到的)的覆盖。订阅覆盖控件的Click事件,您可以单击禁用的控件。

我强烈建议不要使用这种方法,并认为它是一种 hack。你真的应该寻找一种替代方法,而不是必须使用一个禁用的控件和一个覆盖控件。

也许是一个不同的 UI 或者至少将它包装在一个UserControl中以隔离这个混乱的逻辑。

于 2012-05-26T14:48:28.170 回答
0

将按钮的背景属性设置为透明仍然会留下边框。如果您想要一个完全透明的按钮,请执行以下两项操作之一:

创建一个透明面板并为 Click 事件分配一个方法

或者最好

创建一个仅填充 BackColor(设置为透明)的自定义 UserControl,并将方法分配给 Click 事件。

public class Invisible_Button : UserControl
{
    protected override void OnMouseMove(MouseEventArgs e)
    {
        base.OnMouseMove(e);
        this.Cursor = Cursors.Hand;
    }
    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);
        e.Graphics.FillRectangle(new SolidBrush(this.BackColor), 0, 0, this.Width, this.Height);
    }
}
于 2016-09-23T16:50:20.960 回答
-1

你试过了button.Visible = false吗?如果您只想隐藏它,这将完成这项工作。

于 2012-05-26T04:47:28.503 回答