好吧,所以我一直在环顾四周(在 SO 和 Google 上),看看一个问题是否可以解决我的错误,但显然不能,所以这里是:
我正在尝试打印有时会超过一页的内容,并且正在检查要打印的页数。在检查了所有这些逻辑之后,我使用该HasMorePages
属性来设置是否有另一个页面。这是我的代码:
int currentpage = 0;
int pagesleft = 0;
private void doc_PrintPage(object sender, PrintPageEventArgs ev)
{
ev.Graphics.Clear(Color.White);
int numofpages = (int)Math.Ceiling((double)(numofwords / 29.0));
numofpages = (int)Math.Ceiling((double)(numofwords / 29.0));
currentpage = currentpage + 1;
if(currentpage == 1)
{
pagesleft = numofpages;
}
if (numofwordsleft >= 29)
{
currentwords = 29;
}
else
{
currentwords = numofwordsleft;
}
Font f19 = new Font("Arial", (float)19);
Font f9 = new Font("Arial", (float)9);
ev.Graphics.DrawString("Pages: "+numofpages.ToString()+" Words: "+numofwords.ToString()+" "+currentwords.ToString(), f19, Brushes.Red, 200, 300);
ev.Graphics.DrawString("Words Left: "+numofwordsleft, f19, Brushes.Green, 200, 500);
ev.Graphics.DrawString("Pages: "+numofpages.ToString()+" Current Page: "+currentpage.ToString(), f19, Brushes.Blue, 200, 700);
numofwordsleft = numofwordsleft - currentwords;
pagesleft = pagesleft - 1;
//currentpage++;
//if (currentpage != numofpages && currentpage < numofpages && pagesleft > 0 && pagesleft != 0)
if(currentpage < numofpages)
{
ev.HasMorePages = true;
}
else
{
ev.HasMorePages = false;
}
}
现在一切正常,但是当我尝试打印多页时,它会打印 2 页。我做了一些调试,发现了这个:
所以HasMorePages
等于false
所以它应该只打印一页。我按下了继续调试,它在最后再次到达断点。因为我一开始就清除了页面,所以我只看到了第二页(在 a 中printpreview
),但是printpreview
说只有一页,唯一显示的页面是第二页。
这是printpreview
:
对于蓝色文本,我正在这样做:
ev.Graphics.DrawString("Pages: "+numofpages.ToString()+" Current Page: "+currenpage.ToString(), ...);
打印预览清楚地表明它在第 1 页。
对不起,很长的帖子,但我需要帮助。如果您可以帮助我/指出解决此问题的正确方向,请在此处发布。
谢谢!
编辑:所以当我尝试打印 2 页时,使用:
int numofpages = Math.Ceiling(39.0 / 29.0);
它打印 3 页,但都在同一页上,如图所示,PrintPreview
除非它不能正常工作。