我一直在遇到一个Winforms应用程序的一个非常奇怪的错误,其中显示隐藏的表单可能会导致该表单的按钮&背景透明。随后可以通过将鼠标移动到按钮上来显示按钮,就好像表单没有被正确地无效/绘制一样。例如,一个看起来像这样的表单:
可能会这样:
移动鼠标会导致按钮绘制:
这是一个简短的视频,可以准确显示其行为:http://screencast.com/t/XmFSPfLw。在Show事件中显式调用Invalidate()或Refresh()不会修复它。
奇怪的是,此问题仅出现在某些计算机上,而且我无法辨别这些计算机的共同点。
- 我见过它发生在不同版本的Windows 7(Embedded,x64和x86)中 - 但并非所有这些实例都发生过。
- 所有系统都运行相同版本的.NET,并且所有系统都已完全更新。
- 在发生这种情况的系统上,只有在显示之前显示过的表格时才会发生。隐;它在重新显示时发生(即从未在第一次创建和显示表单时)。
- 在发生这种情况的系统上,它不会发生在所有形式上,甚至与它发生的形式不一致(后续几个隐藏/显示的例子,有时它会发生,有时它不会: http://screencast.com/t/liQ53p8Sce)。
- 在发生这种情况的系统上,只有在应用程序缩放到屏幕的完整分辨率时才会发生。我使用Control.Scale()将每个表单缩放到用户指定的分辨率;如果这与屏幕分辨率相同,则可能会在某些系统上发生错误;如果它缩小到任何东西,我从未见过它(例如:这里的视频与上面的第一个相同;缩放到小于全屏分辨率的形式,它不会发生:{{3} })。
我一直在试图弄清楚我的头发,试图弄清楚出现问题的系统有什么不同,以及为什么它首先发生。我真的不得不让客户给我一台显示问题的笔记本电脑,因为我无法在我这里的任何系统上重现它。我真的对这个原因感到茫然......