C# WinForms 透明窗体叠加问题

7
我的主要窗体中有一个水平分割容器。顶部包含一个对象列表视图控件
我正在使用先前C#透明覆盖窗体的代码答案
我的问题似乎与对象列表视图有关。使用上面答案中的代码,透明窗体完美地覆盖了所有控件,但当它到达对象列表视图时,它似乎在这个特定控件上绘制更暗的颜色。
如果我关闭透明覆盖并将空白面板带到前面,在打开透明覆盖时,它仍然显示这个更暗的部分,就好像对象列表视图控件仍然可见一样。
我首先想知道为什么会发生这种情况。但我也想知道如何修复这个问题,使覆盖是一致的。
  • 如果您想测试此功能,可以创建一个简单的项目以演示问题here
为了复制所发生的情况...
  1. 将分割容器拖下一点并单击覆盖按钮。
  2. 通过单击白色面板关闭覆盖。单击空白面板按钮,然后再次单击覆盖按钮。
请注意,在Plexiglass类中,它仅将面板作为参数仅是为了演示,而在我的实际项目中,它将主窗体作为参数。 编辑 我将颜色从深灰色改为白色,它完美地工作。我不确定为什么深灰色会引起这个问题,但我对白色的外观感到满意,所以我会坚持使用它。

1
看起来第三方控件几乎是在其位置创建了一个屏幕截图,以便在需要重新绘制时创建缓冲区。 - C.Evenhuis
3
控件使用相同的技巧,GlassPanelForm类。这种组合可能有些棘手。 - Hans Passant
6
你提出问题的方式不够聪明,我无法根据截图猜测你的代码并尝试解决问题。请创建一个最小复现项目,让 Stack Overflow 用户可以轻松地复制或下载。你需要自己先做好准备工作。 - Hans Passant
2
无论如何,也许是图形驱动程序或其他什么原因?您可以尝试在一些干净的虚拟机上测试,以查看它是否与系统或框架有关。 - Patrice Gahide
1
更新:之前在W8上测试是可以的,现在在W7上测试失败了。两者都安装了.NET 4.5。 - Patrice Gahide
显示剩余11条评论
1个回答

0

由于某种原因,透明窗体的Color.DarkGray BackColor属性导致了问题。将BackColor更改为Color.White解决了这个问题。

感谢Patrice Gahide的帮助。


2
不客气,我的部分并不是很难 ;) 很高兴你终于解决了它。 - Patrice Gahide

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