我得到了一個窗體,其中有多個主要標籤和文本框的頁面,我試圖保留我已經在winform中的字體,到目前爲止我能夠打印的第一頁,但是當我嘗試添加其餘的控件時,它做了各種奇怪的東西,這是我的代碼的一部分,我把所有的東西打印,但並非面板中的所有控件顯示打印預覽。所以我發現面板上的控件沒有按順序,我需要做的是先創建打印頁面的數量,然後將控件放在這些打印頁面中。首先嚐試創建打印頁面以將控件添加到它的任何幫助。它將始終是4個打印頁面。打印時打印WinForform中的所有控件c#使用PrintDocument
int mainCount = 0;
public void printStuff(System.Drawing.Printing.PrintPageEventArgs e)
{
Font printFont = new Font("Arial", 9);
int dgX = dataGridView1.Left;
int dgY = dataGridView1.Top += 22;
double linesPerPage = 0;
float yPos = 0;
int count = 0;
float leftMargin = e.MarginBounds.Left;
float topMargin = e.MarginBounds.Top;
float bottomMargin = e.MarginBounds.Bottom;
StringFormat str = new StringFormat();
linesPerPage = e.MarginBounds.Height/printFont.GetHeight(e.Graphics);
Control ctrl;
while ((count < linesPerPage) && (panel1.Controls.Count != mainCount))
{
ctrl = panel1.Controls[mainCount];
yPos = topMargin + (count * printFont.GetHeight(e.Graphics));
mainCount++;
count++;
if (ctrl is Label)
{
e.Graphics.DrawString(ctrl.Text, printFont, Brushes.Black, ctrl.Left + 5, ctrl.Top + 40);
}
else if (ctrl is TextBox)
{
e.Graphics.DrawString(ctrl.Text, printFont, Brushes.Black, ctrl.Left + 5, ctrl.Top + 40);
e.Graphics.DrawRectangle(Pens.Black, ctrl.Left, ctrl.Top + 40, ctrl.Width, ctrl.Height);
}
}
if (count > linesPerPage)
{
e.HasMorePages = true;
}
else
{
e.HasMorePages = false;
}
}
//Print
private void exportFileToolStripMenuItem_Click(object sender, EventArgs e)
{
printPreviewDialog1.Document = printDocument1;
printPreviewDialog1.ShowDialog();
}
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
printStuff(e);
}
和究竟是這些確實奇怪的事情? – 2013-03-07 16:53:28
在第一頁之後,它將整個頁面上的其他控件打印出來,並且很多頁面都是空白的。 – 2013-03-07 16:57:40
該代碼假定* mainCount *與應打印控件的頁面有關。情況並非如此,控制的位置屬性是重要的。還必須對頁碼進行調整。並且BeginPrint缺失將計數器重置爲0.讓表格不適合放在紙上也非常不尋常。 – 2013-03-07 17:51:47