さて、私は(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
ので、1ページだけを印刷する必要があります。デバッグの続行を押すと、最後にブレークポイントに再びヒットしました。最初にページをクリアしたので、2ページ目(のprintpreview
)printpreview
しか表示されていませんでしたが、1ページしかなく、表示されていたのは2ページ目だけだったとのことです。
これがprintpreview
:
青いテキストの場合、私はこれを行っています:
ev.Graphics.DrawString("Pages: "+numofpages.ToString()+" Current Page: "+currenpage.ToString(), ...);
そして、印刷プレビューはそれがページ1にあることをはっきりと示しています。
長い投稿で申し訳ありませんが、助けが必要です。あなたが私を助けて/これを解決するための正しい方向に私を向けることができるならば、ここに投稿してください。
ありがとう!
編集:それで、私が2ページを印刷しようとすると、以下を使用します。
int numofpages = Math.Ceiling(39.0 / 29.0);
PrintPreview
3ページを印刷しますが、正しく機能しない場合を除いて、すべて同じページに表示されます。