PrintDocument HasMorePages不起作用
本文关键字:不起作用 HasMorePages PrintDocument | 更新日期: 2023-09-27 18:31:34
数据表(dt)包含我要打印的数据。 一页可以容纳 15 行。代码适用于第一页,但注释行不起作用,并且打印了无限数量的页面。任何人都可以帮助解决这个问题吗?
private void Doc_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
for (int y = 0; y <= dt.Columns.Count; y++)
{
e.Graphics.DrawLine(Pens.Black, 50 + (y * 150), 150, 50 + (y * 150), 1000);
}
for (int x = 0; x < dt.Rows.Count; x++)
{
e.Graphics.DrawLine(Pens.Black, 50, 200 + (x * 50), 700, 200 + (x * 50));
}
for (int z = 0; z < dt.Rows.Count; z++)
{
for (int d = 0; d < dt.Columns.Count; d++)
{
string element = dt.Rows[z][d].ToString();
e.Graphics.DrawString(element, new Font("Arial", 14, FontStyle.Italic), Brushes.Black, 60 + (d * 150), 210 + (50 * Rows));
}
//if (z % 15 == 0)
//{ e.HasMorePages = true; Rows = 0; break; }
//else { e.HasMorePages = false; }
Rows++;
}
}
由于打印的页面数是无限的,因此您的问题与您如何确定e.HasMorePages
= true
有关。因为z
从0
开始,它永远无法超过15
因为一旦它到达15
,循环就会中断并e.HasMorePages = true
,并且z
= 再次0
。要解决问题,您可以做的是拥有一个变量来跟踪您打印了多少页。你可以尝试这样的事情:
int pages = 0;
private void Doc_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
//...
for (int z = pages * 15; z < dt.Rows.Count; z++)
{
for (int d = 0; d < dt.Columns.Count; d++)
{
//draw text
}
if (z - pages * 15 == 15)
{ e.HasMorePages = true; Rows = 0; pages++; break; }
else { e.HasMorePages = false; }
Rows++;
}
}
编辑:确保每次开始打印时pages
重置为零,否则将无法正确打印。您可以使用BeginPrint
事件。
private void Doc_BeginPrint(object sender, System.Drawing.Printing.PrintEventArgs e)
{
pages = 0;
}