我有一个以全屏模式打开的父表单Form1
。 Form1
中有一个按钮,可以打开表单Form2
(使用.ShowDialog()
方法)。表单关闭后,程序会捕获Form1
的屏幕截图。但是在屏幕截图中,我仍然可以看到Form2
在关闭期间仍然具有一些不透明度(我正在使用Microsoft Windows 7 Pro
,通过减少表单的不透明度来激活表单的关闭)。
那么我怎么知道Form2
何时100%关闭,以便我可以截取该程序的屏幕截图?
修改:我在Form1
中使用Graphics.CopyFromScreen Method来捕获屏幕截图。
使用Form2
方法点击Form2
按钮,this.Close()
已关闭。
答案 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
窗口的全屏图像。它有一些限制(您可以在文档中阅读),但只要在您的情况下不适用,它可能是一种更方便的方式来获得您想要的图像。