C# - 透明窗体

18
我目前有一个表单,它已经拥有了所需的大部分效果,除了一个。当前表单包括一个菜单栏和一个面板,面板下面有标签和图片框。当启动表单时,菜单栏是不可见的,只有在用户按下“Alt”键时才会显示,并以同样的方式消失。
面板将具有带有透明背景(.PNG)的背景图像。由于我将边框样式设置为无,因此该图像将成为表单的主要布局。现在的问题是,表单仍然具有面板下方的白色/灰色背景。
现在我的问题是,如何使表单透明,使面板上的图像成为主要布局,而不仅仅是表单背景色下的图像。我不想使用Opacity属性,因为我希望面板的可见度为100%。
2个回答

37

假设使用的是WinForms。

您可以这样做,但是无法使边缘半透明。

请尝试以下操作。

在窗体上设置以下属性:

BackColor = Color.Lime;
TransparencyKey = Color.Lime;

这将使表单透明。然后设置背景图像:

BackgroundImage = myImage:

背景图像中也是Color.Lime的部分也会变成透明的。

如果您还想去掉Forms的边框,也请添加以下代码:

FormBorderStyle = FormBorderStyle.None;

这个方法很好!感谢您的迅速回复和详细解释。我简直不敢相信它如此简单!再次感谢。 - user525192
很高兴能够帮忙。我曾经为一个应用程序制作启动画面时也做过同样的事情。 - Øyvind Bråthen
谢谢,它能很好地工作。有一个问题,我注意到如果我使用drawstring将一些文本绘制到透明的标签上,放在透明的表单上,文本周围会出现绿色(或任何用作TransparencyKey的颜色)锯齿状。你知道如何解决吗? - camino

4

在选择背景颜色时要小心。选择与文本、图像和任何控件颜色不同的背景颜色,这意味着选择一个你永远不会在表单中使用的颜色,我认为Fuchsia / lime是最好的选择。以下是选取背景颜色代码:

this.BackColor = Color.Fuchsia;

然后使用以下代码将该颜色变为透明:

TransparencyKey = Color.Fuchsia;

1
为什么选择你永远不会使用的颜色? - nalply
6
如果你在别处使用了同样的颜色,并将其设置为“TransparencyKey”,那么它也会变成透明的。就像天气预报员穿着亮绿色西装出现在绿幕前一样。 - DTI-Matt
是的,因为我们将透明化一个颜色,当您使用表单中使用的颜色时,那个文本或图像也将变成透明。 - kislay kumar
你可以使用表单属性来完成,而不一定需要编写代码。 - Moxet Jan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接