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

时间:2015-02-17 08:16:34

标签: c# .net winforms showdialog

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

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

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

使用Form2方法点击Form2按钮,this.Close()已关闭。

2 个答案:

答案 0 :(得分:2)

我提出了一个不需要等待的简单解决方案。

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

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

答案 1 :(得分:2)

如果有办法确定Windows桌面管理器动画已经完成,那么它本身并不在.NET中。你必须找到一个提供这个细节的原生API(我不确定它是否存在......我不知道它是否存在)并通过p / invoke执行它。

我认为评论者/回答者dotctor提供了几个不错的选择:只是延迟足够长的时间来考虑动画,或者在关闭时将违规窗口移开(如果你重复使用相同的Form2实例,在再次显示之前将其移回。)

也就是说,您也可以考虑使用Control.DrawToBitmap()方法进行屏幕截图,因为您似乎希望图像成为Form1窗口的全屏图像。它有一些限制(您可以在文档中阅读),但只要在您的情况下不适用,它可能是一种更方便的方式来获得您想要的图像。