在透明表单内设置表单的不透明度

Posted

技术标签:

【中文标题】在透明表单内设置表单的不透明度【英文标题】:Set opacity of a form inside a transparent form 【发布时间】:2013-11-01 12:34:10 【问题描述】:

我有一个场景,BaseForm 需要是透明的,并且其中的面板是表单的 1/4 高度并且应该是不透明的(其中有一些按钮和文本框)。因此,我将 BaseFrom 的透明键设置为 BackColor 并为面板设置了其他颜色。

对于该区域的其余部分,我需要它是透明的,但在相同的情况下捕获事件,所以我使用另一个表单(EventForm)来做到这一点,不透明度设置为 1%。但是在将 EventForm 作为子项添加到 BaseForm 时,不透明值被不透明的父表单 (BaseForm) 覆盖,我看到了一个灰色区域。我无法更改基本表单的不透明度,因为它也会影响顶部面板。

有什么建议吗?

【问题讨论】:

Windows 实现了透明窗口对鼠标单击也是透明的硬性规则。他们转到底层窗口,即用户看到的窗口。使用低级鼠标钩子拦截鼠标事件将是另一种选择。当点击可见窗口不再起作用时,请注意用户的完全困惑。 【参考方案1】:

很幸运,我发现有许多BackColors 设置可以使您的表单透明且仍可点击。其中一种颜色是Red,所以你可以试试这个:

public Form1()
   InitializeComponent();
   BackColor = Color.Red;
   TransparencyKey = BackColor;

如果您有其他颜色为红色的 UI 控件,您可以尝试其他颜色(正如我所说,有许多颜色以​​相同的方式工作)。关键是我不知道为什么它会这样工作,只是尝试它就可以了。难以置信,因为据我所知,Opacity = 0 的意思是click through

【讨论】:

似乎利用了一个错误。但不幸的是我没有为我工作:( @ramindar 您使用的是什么版本的 .NET?我正在使用.NET 3.5 @ramindar 我刚刚在.NET 4.5 中进行了测试,它也可以正常工作,看起来它不是错误。如果您愿意,我会将演示项目发送给您,让您看看它的实际效果。 @ramindar 我真的不明白为什么它对你不起作用,代码很简单,下面是4.5 versionsites.google.com/site/thecabinet3/home/files-store/…的链接 我尝试运行您的解决方案,但它对我不起作用。我可以单击表单但无法捕获事件。有 4.5 版本

以上是关于在透明表单内设置表单的不透明度的主要内容,如果未能解决你的问题,请参考以下文章

打开表单时更改窗口不透明度

使表单在首次加载时不可见

如何在 WinForms 中设置面板的不透明度或透明度?

Javascript如何改变透明度

IE8 中的不透明度取决于位置:相对

C# - 透明表单