C# Winforms应用程序中奇怪/不可预测的透明背景错误

C# Winforms应用程序中奇怪/不可预测的透明背景错误,c#,.net,winforms,C#,.net,Winforms,我在Winforms应用程序中遇到了一个非常奇怪的错误,显示隐藏的表单可能会导致表单的按钮和背景变得透明。随后,将鼠标移到按钮上可以显示按钮,就好像表单没有正确地失效/绘制一样。例如,一个如下所示的表单: 可能会出现这样的情况: 移动鼠标会导致按钮绘制: 下面是一个简短的视频,可以准确地显示它的行为:。在Show事件中显式调用Invalidate()或Refresh()并不能解决此问题 奇怪的是,这个问题只出现在一些计算机上,而我还没有发现这些计算机有什么共同点 我在不同版本的Windows

我在Winforms应用程序中遇到了一个非常奇怪的错误,显示隐藏的表单可能会导致表单的按钮和背景变得透明。随后,将鼠标移到按钮上可以显示按钮,就好像表单没有正确地失效/绘制一样。例如,一个如下所示的表单:

可能会出现这样的情况:

移动鼠标会导致按钮绘制:

下面是一个简短的视频,可以准确地显示它的行为:。在Show事件中显式调用Invalidate()或Refresh()并不能解决此问题

奇怪的是,这个问题只出现在一些计算机上,而我还没有发现这些计算机有什么共同点

  • 我在不同版本的Windows7(嵌入式、x64和x86)中看到过这种情况,但不是所有这些版本的实例
  • 所有系统都运行相同版本的.NET,并且都已完全更新
  • 在发生这种情况的系统上,只有在显示以前显示和隐藏的表单时才会发生这种情况;它发生在重新显示表单时(即,从不是第一次创建和显示表单)
  • 在发生这种情况的系统上,并非所有表单都会发生这种情况,甚至与发生这种情况的表单也不一致(几个后续隐藏/显示的示例,有时会发生,有时不会:)
  • 在发生这种情况的系统上,只有当应用程序缩放到屏幕的全分辨率时,才会发生这种情况。我使用Control.Scale()将每个表单缩放到用户指定的分辨率;如果这与屏幕分辨率相同,则该错误可能发生在某些系统上;如果它被放大到更小的分辨率,我从未见过这种情况发生(例如:这里的视频与上面的第一个视频相同;当窗体被放大到小于全屏分辨率时,它不会发生:)

我一直在绞尽脑汁,试图弄清楚表现出这个问题的系统有什么不同,以及为什么它会首先发生。我不得不让一个客户给我一台笔记本电脑来显示这个问题,因为我无法在这里的任何系统上复制它。我真的不知道原因…

你找到原因了吗?从来没有找到原因。但是,我可以通过在这个.Owner.Show()之后调用this.Owner.Refresh()来防止这种情况发生。