繁体   English   中英

如何在保持控件完全可见的同时使表单透明?

[英]How do I make a form transparent while keeping the controls fully visible?

我希望有一个表单,其中表单上的控件是完全可见的,但表单本身是不可见的。 如果我更改窗体的Opacity ,这会使窗体和控件上的半透明,所以这不起作用。

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

随着我从未使用它的警告,只是跑了一次,认为“整洁!” 继续......

查看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的答案。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM