当我尝试使用下面的代码打印预览时,它会在先前打印的项目上打印项目。当我将if
块放在for
循环之外时,它开始生成无限页。
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
SolidBrush brush = new SolidBrush(Color.Black);
Font font = new Font("Courier New", 12);
float fontHeight = font.GetHeight();
int startX = 40;
int startY = 30;
int lineperpage = 0;
for (int i = 0; i < 100; i++)
{
e.Graphics.DrawString("Line: " + i, font, brush, startX, startY);
startY += font.Height;
lineperpage++;
if (lineperpage > 50)
{
e.HasMorePages = true;
startY = 30;
lineperpage = 0;
startX = 300;
}
else
{
e.HasMorePages = false;
}
}
}
3条答案
按热度按时间t5zmwmid1#
你必须把你想要打印的 * 数据 * 和一页纸的实际绘图分开。你不能用同样的方法。将HasMorePages设置为true只会向PrintManager发出再次引发
PrintPage
事件的信号。在你的例子中,看起来你的
i
变量就是数据。您需要在PrintPage事件之外跟踪其进度。owfi6suc2#
修复在C#中使用HasMorePages打印时的分页问题。关于这段代码的解释:您可以添加许多行或从数据库中读取,以查看打印时分页的结果,例如,我只手动向表中添加了两行,因为行数很少,所以没有分页。手动添加多行或将数据库中的信息插入网格视图。这是一个例子:
nzkunb0c3#
修复在C#中使用HasMorePages打印时的分页问题。关于这段代码的解释:您可以添加许多行或从数据库中读取,以查看打印时分页的结果,例如,我只手动向表中添加了两行,因为行数很少,所以没有分页。手动添加多行或将数据库中的信息插入网格视图。这是一个例子: