【问题标题】:C# Windows Form Application Transparent buttonC# Windows 窗体应用程序透明按钮
【发布时间】:2012-05-26 04:41:17
【问题描述】:

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

【问题讨论】:

标签: c# button


【解决方案1】:

试试这个很简单。

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

这将使按钮透明。

但是,如果您想让它在 PictureBox 上透明,则此方法将不起作用..

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

【讨论】:

  • 太棒了!迄今为止最好的答案。
  • 如果您还想要透明边框,请将 FlatStyle 设置为“Flat”,然后将 FlatAppearance:BorderSize 设置为 0(零)。
【解决方案2】:
buttonLink.FlatStyle = FlatStyle.Flat; 
buttonLink.BackColor = Color.Transparent;
buttonLink.FlatAppearance.MouseDownBackColor = Color.Transparent;
buttonLink.FlatAppearance.MouseOverBackColor = Color.Transparent;

【讨论】:

  • 提供一点上下文来描述它是如何做的,也许还有一个更大更好的格式化代码 sn-p。如果您有找到此内容的链接,请同时提供。
【解决方案3】:

参考:

原文和代码见:

Displaying a ToolTip when the Mouse Hovers Over a Disabled Control

@ 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(您在其中一个 cmets 中提到的)的覆盖。订阅覆盖控件的 Click 事件后,您就可以单击禁用的控件。

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

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

【讨论】:

    【解决方案4】:

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

    创建一个透明面板并为 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);
        }
    }
    

    【讨论】:

      【解决方案5】:

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

      【讨论】:

      • 如果你想对按钮控件做任何事情,比如点击它,那是行不通的。
      • 同意,但不清楚他是否只是想在某些事件之前隐藏它,还是希望在其他一些元素上设置一个透明按钮。
      • 使用该属性,我无法单击按钮。所以实际上我想要一个文本框的点击事件(属性:启用 = false),这样当我点击它时,它会返回一个值。但既然它不能这样做,我必须想出一个不可见的按钮/标签,但可点击
      猜你喜欢
      • 2021-05-20
      • 1970-01-01
      • 2018-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-05
      • 1970-01-01
      相关资源
      最近更新 更多