C#HasMorePages让我无法理解它

时间:2015-03-14 19:45:39

标签: c#

这段代码出了什么问题?

一旦达到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);
}

2 个答案:

答案 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);
}