2015-05-16 3 views
0

Im пытается получить кнопку, чтобы распечатать мою текущую форму и попробовал весь код, который я могу найти здесь, но он продолжает печатать пустые страницы, и я не могу понять почему.Печать формы в приложении Windows

код я использую следующие

Bitmap bitmap; 
private void btnPrint_Click(object sender, EventArgs e) 
{ 
//Add a Panel control. 
Panel panel = new Panel(); 
this.Controls.Add(panel); 

//Create a Bitmap of size same as that of the Form. 
Graphics grp = panel.CreateGraphics(); 
Size formSize = this.ClientSize; 
bitmap = new Bitmap(formSize.Width, formSize.Height, grp); 
grp = Graphics.FromImage(bitmap); 

//Copy screen area that that the Panel covers. 
Point panelLocation = PointToScreen(panel.Location); 
grp.CopyFromScreen(panelLocation.X, panelLocation.Y, 0, 0, formSize); 

//Show the Print Preview Dialog. 
printPreviewDialog1.Document = printDocument1; 
printPreviewDialog1.PrintPreviewControl.Zoom = 1; 
printPreviewDialog1.ShowDialog(); 
} 

private void PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) 
{ 
//Print the contents. 
e.Graphics.DrawImage(bitmap, 0, 0); 
} 

Это работает от кнопки (btnPrint), которая находится на форме (Form2) наряду с нагрузками текстовых и графических)

При нажатии она приносит в диалоговом окне предварительного просмотра печати, но страница пуста. Если я нажму на печать, он напечатает пустую страницу.

Любая идея, почему она не копирует форму?

+0

Вы взломали этот код смерти баловаться с этой панелью. Обработчик событий для обработчика события printDocument1.PrintPage выглядит плохо. Используйте отладчик, установите контрольную точку в обработчике событий PrintPage. С предсказанием, что он не сломается. Дважды щелкните компонент printDocument1 в конструкторе, чтобы добавить обработчик событий. –

+0

Или еще лучше: выбросьте все это и напишите приличную рутину печати, вместо того, чтобы сбрасывать разрешение экрана на ваш принтер. – TaW

+0

Извините, что я очень новичок в этом. Я просто использовал этот код прямо из статьи здесь и просто не мог " я вижу, где он не работал –

ответ

2

Пожалуйста, обратитесь: How to: Print Preview a Form

[System.Runtime.InteropServices.DllImport("gdi32.dll")] 
public static extern long BitBlt (IntPtr hdcDest, 
int nXDest, int nYDest, int nWidth, int nHeight, 
IntPtr hdcSrc, int nXSrc, int nYSrc, int dwRop); 
private Bitmap memoryImage; 
private void CaptureScreen() 
{ 
    Graphics mygraphics = this.CreateGraphics(); 
    Size s = this.Size; 
    memoryImage = new Bitmap(s.Width, s.Height, 
    mygraphics); 
    Graphics memoryGraphics = Graphics.FromImage(
    memoryImage); 
    IntPtr dc1 = mygraphics.GetHdc(); 
    IntPtr dc2 = memoryGraphics.GetHdc(); 
    BitBlt(dc2, 0, 0, this.ClientRectangle.Width, 
    this.ClientRectangle.Height, dc1, 0, 0, 
    13369376); 
    mygraphics.ReleaseHdc(dc1); 
    memoryGraphics.ReleaseHdc(dc2); 
} 

private void printDocument1_PrintPage(System.Object 
sender, System.Drawing.Printing.PrintPageEventArgs e) 
{ 
    e.Graphics.DrawImage(memoryImage, 0, 0); 
} 

private void printButton_Click(System.Object sender, 
System.EventArgs e) 
{ 
    CaptureScreen(); 
    printPreviewDialog1.Document = printDocument1; 
    printPreviewDialog1.Show(); 
} 
+0

Я использовал этот код до того, как он запустится, но когда появится окно предварительного просмотра печати, он говорит: «Документ не содержит никаких страниц» Не знаю, где я ошибаюсь –

+0

Вы могли бы поделиться своим кодом на диске или чем-то еще? –

+0

https://www.dropbox.com/s/vubnjiq9uyopfio/code.txt?dl=0 –

 Смежные вопросы

  • Нет связанных вопросов^_^