我想要一个窗体中的控件完全可见,但窗体本身是不可见的。如果我更改表单的Opacity
,这会使表单和其上的控件半透明,所以这不起作用。如何在保持控件完全可见的情况下使表单透明?
我不能通过设置窗体的TransparencyKey
来做到这一点,因为我在窗体上有一个PictureBox
。如果PictureBox中的图像碰巧包含与TransparencyKey
相匹配的像素,则它们在窗体中显示为开口,这是我不想要的。
我想要一个窗体中的控件完全可见,但窗体本身是不可见的。如果我更改表单的Opacity
,这会使表单和其上的控件半透明,所以这不起作用。如何在保持控件完全可见的情况下使表单透明?
我不能通过设置窗体的TransparencyKey
来做到这一点,因为我在窗体上有一个PictureBox
。如果PictureBox中的图像碰巧包含与TransparencyKey
相匹配的像素,则它们在窗体中显示为开口,这是我不想要的。
TransparencyKey是得到此的唯一方法。选择正确的颜色。 Color.Fuchsia具有成为选择颜色的悠久传统,可追溯到Win32开发的早期阶段。用你的眼睛看看它的优点。
由于我从来没有使用它的警告,只是跑过它一次,认为“整洁!”并继续...
调查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
如果没有加载图像。BackColor
和TransparencyKey
属性以匹配此新颜色,Hans Passant's答案。嗨,这不会做我想要的。用户控制背景仍然具有窗体背景色。例如,如果我使用.png格式图片的图片箱,我仍然可以看到表格背景颜色。 – 2010-05-08 13:21:53
我不知道我明白你在问什么? – 2010-05-08 00:00:53
C#没有做UI,框架没有UI。您使用的是哪个框架(WinForm,WPF,Win32?) – dthorpe 2010-05-08 00:17:04
为了清晰起见进行了编辑 - 如果这不是您要求的,可随时回滚我的更改,但我确定它是。我实际上遇到了完全相同的问题,我想知道如何自己做这个。 – MusiGenesis 2010-05-08 00:31:44