gpt4 book ai didi

c# - HasMorePages 不工作。设置该位会导致在同一页上打印所有项目

转载 作者:太空宇宙 更新时间:2023-11-03 16:15:20 26 4
gpt4 key购买 nike

当我尝试使用下面的代码打印预览时,它会在之前打印的项目上打印这些项目。当我将 if block 放在 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;
}
}
}

最佳答案

您必须将要打印的数据与单个页面的实际绘图分开。您不能以相同的方法使用它们。将 HasMorePages 设置为 true 仅向 PrintMangager 发出再次引发 PrintPage 事件的信号。

在您的情况下,您的 i 变量似乎就是数据。你需要跟踪它在 PrintPage 事件之外的进展。

int i = 0;  // keep track of data in an instance variable 

// this event is re-entrant. It will be called as long as HasMorePages = true;
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;

// removed
//for (int i = 0; i < 100; i++)
// print a page as long as their is space left AND data available
while (lineperpage < 50 && i < 100)
{
e.Graphics.DrawString("Line: " + i, font, brush, startX, startY);
startY += font.Height;
lineperpage++;

i++; // next dataitem
}

e.HasMorePages = i < 100; // keep printing as long as there is date
}

关于c# - HasMorePages 不工作。设置该位会导致在同一页上打印所有项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15955881/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com