C# 控件的屏幕截图为白色

C# 控件的屏幕截图为白色,c#,.net,controls,screenshot,drawtobitmap,C#,.net,Controls,Screenshot,Drawtobitmap,我的问题与此有关: 我想用C语言拍摄System.Windows.Forms.Control的屏幕截图。我正在使用上面链接的问题中建议的DrawToBitmap方法,这种方法大部分时间都有效。但也存在一些问题 问题1: 我有两个tabpages,让我们称它们为A和B。我想要截图的控件在tabpages B中。我想要在按下tabpages A中的按钮时截图。这在大多数情况下都有效,除非tabpage B还没有被访问:然后屏幕截图就是白色的。如果我首先访问tabpage B,然后返回到tabpage

我的问题与此有关:

我想用C语言拍摄System.Windows.Forms.Control的屏幕截图。我正在使用上面链接的问题中建议的DrawToBitmap方法,这种方法大部分时间都有效。但也存在一些问题

问题1: 我有两个tabpages,让我们称它们为A和B。我想要截图的控件在tabpages B中。我想要在按下tabpages A中的按钮时截图。这在大多数情况下都有效,除非tabpage B还没有被访问:然后屏幕截图就是白色的。如果我首先访问tabpage B,然后返回到tabpage A并单击按钮拍摄屏幕截图,则效果良好。我猜这是因为选项卡中的控件尚未加载或构建,但我不确定到底是什么,也不确定它可能完全是其他的东西。我一直在尝试使用ResumeLayout、PerformLayout、Show、Update、Invalidate强制加载或构建,但这不起作用。 编辑:通过在包含tabpage控件(而不是控件本身)上使用DrawToBitmap并在该tabpage上进行显示来解决此问题

问题2: 当我拍摄某个自定义控件(UserControl的子类)的屏幕截图时,屏幕截图中有一个很小的矩形白色区域,显然没有。矩形区域不在控件的某个特定部分(如按钮或文本框)上,因此我不确定是什么导致了这种情况。在其他自定义控件上,UserControl的子类也可以正常工作,所以这本身就不是问题所在。
编辑:解决了它,有一个空控件正在上面绘制。将该控件的Visible设置为false解决了此问题。

您可以使用此代码,其余的工作和找到正确的坐标是由读者完成的

int screenWidth = Screen.GetBounds(new Point(0, 0)).Width;
int screenHeight = Screen.GetBounds(new Point(0, 0)).Height;
Bitmap bmpScreenShot = new Bitmap(screenWidth, screenHeight);
Graphics gfx = Graphics.FromImage((Image)bmpScreenShot);
gfx.CopyFromScreen(0, 0, 0, 0, new Size(screenWidth, screenHeight));
bmpScreenShot.Save("test.jpg", ImageFormat.Jpeg);

对于问题1:如果我首先访问tabpage B,然后返回到tabpage A并单击按钮拍摄屏幕截图,那么它工作正常,然后添加formloadevent模拟该操作:

tabControl.SelectedIndex = IndexOfTabB;
tabControl.SelectedIndex = IndexOfTabA;
这是一个骗局,但它会奏效


对于问题2:你能比较一下你的控件的大小和它的屏幕截图,然后给我们结果吗?如果Control.Width不等于位图屏幕的wirdth,则这是一个真正的问题。

这根本不起作用。这是屏幕上当前内容的截图。我想要的屏幕截图位于当前不在屏幕上的选项卡中。请认真阅读我的帖子。@Luis如果此时选项卡B不活动,屏幕截图将无法正确生成:我用不同的方法解决了问题1。请参阅我编辑的问题,但仍感谢您的帮助。如果您对问题2有任何想法,请告诉我。我在.NET2.0中使用了DrawToBitmap和自定义控件,并且没有任何额外的白色矩形。你的控件有透明部分吗?