这段代码出了什么问题?
一旦达到HasMorePages
,它就会继续在该行上循环
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) {
while (i<10)
{
e.Graphics.DrawString("Onga Bonga", new Font("tahoma", 12), Brushes.Black, 30, 30*i);
if(i==5)
break;
i++;
}
e.HasMorePages = (i < 10);
}
答案 0 :(得分:0)
private int m_myPageIndex = 0;
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
switch(m_myPageIndex)
{
case 0: // print first page
for(int i=0;i<5;i++)
{
e.Graphics.DrawString("Onga Bonga", new Font("tahoma", 12), Brushes.Black, 30, 30*i);
}
m_myPageIndex++;
e.HasMorePages = true;
break;
case 1: // print next page
for(int i=5;i<10;i++)
{
e.Graphics.DrawString("Onga Bonga", new Font("tahoma", 12), Brushes.Black, 30, 30*i);
}
e.HasMorePages = false;
break;
}
}
看看for / while / switch / if / else是如何工作的。
答案 1 :(得分:0)
当你到达第二页时,条件i==5
将再次成立,循环将在写出一行后结束,但不增加变量i
。它将继续逐页写入该行。
获取您开始使用的索引,并计算当前页面的最后一个索引。此外,在增加变量后进行检查,否则您将重复第一页的最后一项作为第二页上的第一项:
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e){
int last = i + 5;
while (i<10) {
e.Graphics.DrawString("Onga Bonga", new Font("tahoma", 12), Brushes.Black, 30, 30*i);
i++;
if (i > last) break;
}
e.HasMorePages = (i < 10);
}