Я создал кнопку, чтобы сделать снимок экрана RichTextBox.
Итак, я взял ответ с этой страницы: как сохранить содержимое файла richtextbox-as-jpg-file
И стоит упомянуть, что
Это должно работать хорошо, если никакое другое окно не перекрывает ваш RTB.
Но так бывает не всегда
вот мой код:
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
, а некоторые нет. На моих окнах 10 CopyFromScreen работает отлично, но на компьютере моего коллеги выходной файл JPG всегда содержит изображение окна saveFileDialog. Это означает, что окно saveFileDialog блокирует RTB, в результате чего CopyFromScreen захватывает окно saveFileDialog вместо RTB
вот вопрос:
Что вызывает другое поведение? (Захватить окно saveFileDialog
окна или нет)
Почему это произошло, поскольку CopyFromScreen
был запущен после закрытия окна saveFileDialog
.
Нет никакой причины, что CopyFromScreen
захватывает изображение saveFileDialog
окна