在透明表单内设置表单的不透明度
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 version
sites.google.com/site/thecabinet3/home/files-store/…的链接
我尝试运行您的解决方案,但它对我不起作用。我可以单击表单但无法捕获事件。有 4.5 版本以上是关于在透明表单内设置表单的不透明度的主要内容,如果未能解决你的问题,请参考以下文章