我有一个包含三个面板的表单。顶部面板包含列表框,中间面板包含网格,而底部面板包含网格。我需要截取底部网格的屏幕截图,但有时网格中有更多行,您需要滚动才能看到每一行。我想在截屏之前使底部网格的大小与表单相同,并且可以通过将两个顶部面板的.Visible设置为false来实现。我的问题是,屏幕截图是在表单重绘以将网格显示为表单大小之前获取的。在执行代码以截取屏幕截图之前,如何保证表单已重绘/重新绘制?

我正在使用Capture screenshot of active window?中ArsenMkrt的答案来截屏。

编辑:网格是Infragistics UltraGrid。

最佳答案

调用表单的Update()方法。如果有任何待处理的油漆,那么您可以确定它们将被执行并且表格已完全绘制。在这里肯定是这种情况,隐藏面板需要表单重新绘制其背景。

这仅适用于您自己的表单,不适用于其他进程拥有的窗口。通常也可以使用窗体的DrawToBitmap()方法(不需要同步),但并非所有子控件都支持它。尤其是RichTextBox和WebBrowser以及许多其他ActiveX控件不能正确实现基础Windows消息。

07-27 22:58