我创建了一个按钮来捕获RichTextBox的屏幕截图。
所以我从本页上得到了答案:how-to-save-the-content-of-richtextbox-as-jpg-file
并提到
只要没有其他窗口与您的实时出价重叠,此方法就应该可以正常工作。
但并非总是如此
这是我的代码:
class ScreenCapture
{
public static void Capture(RichTextBox rtb, string filename)
{
rtb.Update(); // Ensure RTB fully painted
Bitmap bmp = new Bitmap(rtb.Width, rtb.Height);
using (Graphics gr = Graphics.FromImage(bmp))
{
gr.CopyFromScreen(rtb.PointToScreen(Point.Empty), Point.Empty, rtb.Size);
}
bmp.Save(filename, ImageFormat.Jpeg);
bmp.Dispose();
}
}
在我的表单中:
partial class Form1
{
private void Btn_Screenshot_Click(object sender, EventArgs e)
{
var result = saveScreenshotDialog.ShowDialog();
var fileName = saveScreenshotDialog.FileName;
if (result == DialogResult.OK)
{
ScreenCapture.Capture(this.rtb_Result, fileName);
}
}
}
如上面的代码,我使用saveFileDialog
来让用户决定将JPG文件保存在何处
在某些机器上,CopyFromScreen
会捕获saveFileDialog
窗口的img,而有些则不会。在Windows 10上,CopyFromScreen可以完美运行,但是在同事的机器上,输出JPG文件始终包含saveFileDialog窗口的img。这意味着saveFileDialog窗口阻止了RTB,导致CopyFromScreen捕获了saveFileDialog窗口而不是RTB
这是问题:
是什么导致了不同的行为?(是否捕获saveFileDialog
窗口的img)
为什么会这样,因为CopyFromScreen
窗口关闭后触发了saveFileDialog
。
CopyFromScreen
没有理由捕获saveFileDialog
窗口的img
答案 0 :(得分:0)
听起来您有计时问题。在保存对话框完全关闭之前,您正在(可能)捕获屏幕。我认为最简单的解决方案如下:
表示为代码:
csv.DictReader