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

标签 c# .net winforms showdialog

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

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

编辑:我正在使用 Graphics.CopyFromScreen MethodForm1 中捕获屏幕截图。

Form2 通过 Form2 中的按钮点击关闭,使用 this.Close() 方法。

最佳答案

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

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

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

关于c# - 如何知道对话框是否完全关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28557441/

相关文章:

c# - Facebook SDK C# -

c# - 在 Windows 应用商店应用程序的文本框焦点事件上弹出屏幕键盘

c# - 如何导出程序集中所有方​​法的名称?

winforms - 如何在c# windows应用程序中上传多个文件

c# - 如何在单人游戏中使用按钮更改音量?

.net - new KeyValuePair<UInt32, UInt32>(i, j).GetHashCode();重复率高

.net - 导出类中的 std::Vector 成员

c# - 这是在 C# 中无需空检查的情况下触发/调用事件的更好方法吗?

c++ - 如何捕获 Windows 窗体按钮的鼠标悬停事件

c# - Razor View 引擎中有设计 View 吗?