如何知道对话框是否完全关闭?

How to know if the dialog box is closed completely?

我有一个以全屏模式打开的父表单 Form1Form1 中有一个按钮可以打开表单 Form2(使用 .ShowDialog() 方法)。当窗体关闭时,程序捕获 Form1 的屏幕截图。但是在屏幕截图中我仍然可以看到 Form2 在关闭期间仍然有一些不透明度(我正在使用 Microsoft Windows 7 Pro 通过降低表单的不透明度来动画关闭表单)。

那么我如何知道 Form2 何时 100% 关闭,以便我可以截取程序的屏幕截图?

编辑: 我在 Form1 中使用 Graphics.CopyFromScreen Method 来捕获屏幕截图。

并且 Form2 通过在 Form2 中使用 this.Close() 方法单击按钮关闭。

我想出了一个无需等待的简单解决方案。

Form2 上的 FormClosing 事件添加一个处理程序,并将其位置设置在屏幕外的某个地方。

private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
   this.Location = new Point(-4000,-4000);
}

如果有办法确定 Windows 桌面管理器动画已经完成,它不在 .NET 本身中。您必须找到提供此详细信息的本机 API(我不确定是否存在……我不知道是否存在)并通过 p/invoke.[= 执行它15=]

我认为 commenter/answerer dotctor 提供了几个不错的选择:只需延迟足够长的时间来解释动画,或者将有问题的 window 移开关闭(如果您确实重复使用相同的 Form2 实例,请在再次显示之前将其移回)。

也就是说,您也可以考虑使用 Control.DrawToBitmap() 方法进行屏幕截图,因为您似乎希望图像是 Form1 [=26= 的全屏图像].它有一些限制(您可以在文档中阅读),但只要 none 适用于您的情况,它可能是获取所需图像的更方便的方法。