Savi kolla Ответов: 1

Как сохранить и распечатать форму windows, в которой много страниц C#.NET.


У меня есть форма Windows, которая имеет 4 страницы. В моей форме есть текстовые поля со значениями и метками. Я пытаюсь сохранить форму и распечатать ее. Я могу напечатать только первую страницу. Как я могу напечатать другие страницы? Когда я пытаюсь сохранить его, я получаю пустую страницу. Код, который я использую, приведен ниже: Спасибо.

Что я уже пробовал:

[Система.Во время выполнения.InteropServices.DllImport("gdi32.dll")]
публичный статический модификатор extern длинная передача битового блока(указателя IntPtr hdcDest, nXDest инт, инт nYDest, тип int nWidth, int и простого, указателя IntPtr hdcSrc, инт nXSrc, тип int nYSrc, инт dwRop);
частное растровое изображение memoryImage;

частный void CaptureScreen()
{
Graphics mygraphics = это.CreateGraphics();
Размер s = this. Size;
memoryImage = новое растровое изображение(s. Width, s. Height, mygraphics);
Графика memoryGraphics = графика.FromImage(memoryImage);
IntPtr dc1 = mygraphics.GetHdc();
IntPtr dc2 = memoryGraphics.GetHdc();
BitBlt(dc2, 0, 0, this.ClientRectangle.Ширина, вот это.ClientRectangle.Высота, dc1, 0, 0, 13369376);
моя графика.ReleaseHdc(dc1);
memoryGraphics.ReleaseHdc (dc2);
}

private void printDocument1_PrintPage(System.Отправитель объекта, система.Рисование.Печатание.PrintPageEventArgs e)
{
е.Графика.DrawImage (memoryImage, 0, 0);
}

частная printToolStripButton_Click недействительным(объект отправителя, EventArgs в электронной)
{
CaptureScreen();
printDocument1.Печать();
}


частная saveToolStripButton_Click недействительным(объект отправителя, EventArgs в электронной)
{
Поток myStream;
saveFileDialog1.Filter = " все файлы (*.*)|*.*";
saveFileDialog1.FilterIndex = 2;
saveFileDialog1.RestoreDirectory = true в;

if (saveFileDialog1.ShowDialog () = = DialogResult.ОК)
{
if ((myStream = saveFileDialog1.OpenFile ())! = null)
{
using (var writer = new StreamWriter(myStream))
{
CaptureScreen();
писатель.метод WriteLine();
}
myStream.Закрывать();
}
}
}

Philippe Mori

Поместите свой код в блок кода.

1 Ответов

Рейтинг:
10

OriginalGriff

Не делай этого так!
Вместо того чтобы делать снимок экрана, распечатайте содержимое формы - данные, которые она отображает в различных элементах управления, - непосредственно на свой PrintDocument.
Класс PrintDocument (System.Рисование.Печатание)[^] включает в себя базовый пример.


Manoj Kumar Choubey

+5