好了,所以我一直在尋找周圍(在SO和谷歌),看是否有問題可以解決我的錯誤,但顯然不是,所以這裏有雲:印刷HasMorePages的工作不C#
我想打印的東西,有時會有多個頁面,我正在檢查要打印的頁面數量。在檢查了所有這些邏輯之後,我使用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
所以應該只打印1頁。我按下繼續調試,並在最後再次觸發斷點。由於我在開始時清除了頁面,因此我只看到第二頁(在printpreview
中),但printpreview
表示只有1頁,而唯一顯示的頁面是第二頁。
這裏是printpreview
:
對於藍色文字我這樣做:
ev.Graphics.DrawString("Pages: "+numofpages.ToString()+" Current Page: "+currenpage.ToString(), ...);
和打印預覽清楚地說,這是第1頁上
對不起,很長的文章,但我需要幫助。如果你能幫助我/指出我解決這個問題的正確方向,請在這裏發帖。
謝謝!
編輯:所以,當我嘗試打印2頁,使用:
int numofpages = Math.Ceiling(39.0/29.0);
它打印3頁,但都在同一頁上,如圖PrintPreview
除非這是不正常。
使用BeginPrint事件重置頁計數器。 –