【问题标题】:How do I make a form transparent while keeping the controls fully visible?如何在保持控件完全可见的同时使表单透明?
【发布时间】:2011-02-17 01:14:05
【问题描述】:

我想要一个表单,其中表单上的控件是完全可见的,但表单本身是不可见的。如果我更改表单的Opacity,这会使表单和它上面的控件都是半透明的,所以这不起作用。

我不能通过设置表单的TransparencyKey 来做到这一点,因为我在表单上有一个PictureBox。如果 PictureBox 中的图像恰好包含与TransparencyKey 匹配的像素,它们会在表单中显示为开口,这是我不想要的。

【问题讨论】:

  • 我不确定我明白你在问什么?
  • C# 不做 UI,框架做 UI。您使用的是哪个框架(WinForm、WPF、Win32?)
  • 为清楚起见进行了编辑 - 如果这不是您所要求的,请随时回滚我的更改,但我很确定它是。我实际上遇到了完全相同的问题,我想知道自己该怎么做。

标签: c# .net winforms transparency


【解决方案1】:

TransparencyKey 是获得此功能的唯一方法。选择正确的颜色。 Color.Fuchsia 作为首选颜色有着悠久的传统,这可以追溯到 Win32 开发的早期。用它攻击你的眼睛,看看它的优点。

【讨论】:

    【解决方案2】:

    需要注意的是,我从未使用过它,只是跑过一次,心想“干净!”然后继续……

    查看System.Drawing.Drawing2D.GraphicsPath 并设置表单的Region 属性。我在基本的 Windows 窗体应用程序中添加了两个按钮:

    public Form1()
    {
        InitializeComponent();
    
        Rectangle r1 = new Rectangle(button1.Location, button1.Size);
        Rectangle r2 = new Rectangle(button2.Location, button2.Size);
    
        GraphicsPath gp = new GraphicsPath();
        gp.AddRectangle(r1);
        gp.AddRectangle(r2);
    
        this.Region = new Region(gp);
    }
    

    我用矩形近似了按钮的形状;使用此代码,您可以在按钮的角落看到表单背景颜色。您需要计算出每个控件的封闭路径,并将它们单独添加到路径中。您需要考虑表单标题栏或边框样式引入的任何偏移量。

    更新:我做了一些调查,并有几种可能的方法来解决这个问题:

    • 如果没有加载图片,使用GraphicsPath方法,将pictureBox.Visible设置为False
    • 当您将图像加载到图片框中时,分析图像以获取其中所有颜色的列表,然后随机生成一个不是的。设置表单的 BackColorTransparencyKey 属性以匹配这个新颜色 Hans Passant's 答案。

    【讨论】:

    • 嗨,这不是我想要的。用户控件背景还有表单背景颜色。例如,如果我使用带有 .png 格式图像的图片框,我仍然可以看到表单的背景颜色。
    猜你喜欢
    • 2012-04-23
    • 1970-01-01
    • 2018-10-11
    • 1970-01-01
    • 2015-12-31
    • 2022-01-10
    • 2021-09-05
    • 2016-11-22
    • 1970-01-01
    相关资源
    最近更新 更多