Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何知道对话框是否完全关闭?_C#_.net_Winforms_Showdialog - Fatal编程技术网

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

C# 如何知道对话框是否完全关闭?,c#,.net,winforms,showdialog,C#,.net,Winforms,Showdialog,我有一个以全屏模式打开的父窗体Form1。Form1中有一个按钮,打开一个表单Form2(使用.ShowDialog()方法)。当表单关闭时,程序将捕获Form1的屏幕截图。但是在屏幕截图中,我仍然可以看到Form2,它在关闭时仍然有一些不透明度(我正在使用MicrosoftWindows7Pro,它通过减少表单的不透明度来设置表单关闭的动画) 那么,我如何知道窗体2何时100%关闭,以便拍摄程序的屏幕截图呢 编辑:我正在Form1中使用来捕获屏幕截图 使用this.Close()方法,通过点击

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

那么,我如何知道
窗体2
何时100%关闭,以便拍摄程序的屏幕截图呢

编辑:我正在
Form1
中使用来捕获屏幕截图


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

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

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

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

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

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

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

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

我认为commenter/Answer提供了两个很好的选择:延迟足够长的时间来解释动画,或者在关闭时将有问题的窗口移到一边(如果确实重用了相同的
Form2
实例,请在再次显示之前将其移回)


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

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

我认为commenter/Answer提供了两个很好的选择:延迟足够长的时间来解释动画,或者在关闭时将有问题的窗口移到一边(如果确实重用了相同的
Form2
实例,请在再次显示之前将其移回)



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

关闭Form2时使用什么方法?我认为这是因为windows主题中的动画。如何捕获表单1的屏幕截图?您应该添加用于关闭表单的代码以及打开表单的代码/屏幕截图(假设这是使用
ShowDialog()
)相关问题:等一秒钟再抓拍截图怎么样?你用什么方法关闭Form2?我想这是因为windows主题中的动画。如何捕获表单1的屏幕截图?您应该添加用于关闭表单的代码以及打开表单的代码/屏幕截图(假设这是使用
ShowDialog()
)相关问题:等待1秒,然后捕获屏幕截图如何?但是,如果您希望重新打开同一对话框,这将非常烦人。可以存储以前的位置,然后在显示的
上还原@Sayse@Sayse如何重新打开已处理的对话框?无论如何,您都必须创建一个新的线程。
Thread.Sleep(1000)
解决了这个问题。谢谢你的努力。我一直生活在谎言中!但是,如果您希望重新打开同一对话框,这将非常烦人。您可以存储上一个位置,然后在显示的
上还原该位置@Sayse@Sayse如何重新打开已处理的对话框?无论如何,您都必须创建一个新的线程。
Thread.Sleep(1000)
解决了这个问题。谢谢你的努力。我一直生活在谎言中!那么如何创建1秒的延迟呢?
Thread.Sleep(1000)
,在UI线程上调用它也不是一个好主意@L16H7@L16H7:这是一个完全不同的问题!:)您没有提供足够的代码示例来了解如何在代码中创建延迟。例如,您可以使用
System.Windows.Forms.Timer
Task.Delay()
。那么如何创建1秒的延迟呢?
Thread.Sleep(1000)
,在UI线程上调用它也不是一个好主意@L16H7@L16H7:这是一个完全不同的问题!:)您没有提供足够的代码示例来了解如何在代码中创建延迟。例如,您可以使用
System.Windows.Forms.Timer
,或
Task.Delay()