0

従業員の毎日の勤怠記録のレポートを作成するアプリケーションがあります。問題は、印刷プレビュー ダイアログのすべてのページが、印刷可能なすべてのページによって上書きされていたことです。どうすればこの種の問題を解決できますか? ページ 1 のコンテンツはページ 1 用であり、ページ 2 はページ 2 用であり、その逆も同様です。印刷用の私のコードは次のとおりです。

    private void simpleButtonOk_Click(object sender, EventArgs e)
    {
        try
        {
            countPage = 0;
            CoolPrintPreviewDialog printPreview = new CoolPrintPreviewDialog();
            PrintDocument doc = new PrintDocument();
            doc.PrintPage += new PrintPageEventHandler(doc_PrintPage);
            printPreview.Document = doc;
            Form p = (Form)printPreview;
            p.WindowState = FormWindowState.Maximized;
            p.ShowDialog();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

    void doc_PrintPage(object sender, PrintPageEventArgs e)
    {
        try
        {
            for (int i = 1; i <= countEmployee; i++)
            {
                Font fontName = new Font("Calibri", 12, FontStyle.Bold);
                Font fontPosition = new Font("Calibri", 12, FontStyle.Regular);
                Brush colorBrush = new SolidBrush(Color.Black);

                e.Graphics.DrawString(empName, fontName, colorBrush, new Point(80, 120));
                e.Graphics.DrawString(empPosition, fontPosition, colorBrush, new Point(80, 140));
                e.Graphics.DrawString(empId, fontPosition, colorBrush, new Point(680, 120));
                DataManipulation.PrintSelectEmployeeByMonth(i, e, comboBoxMonth, comboBoxYear, comboBoxDayFrom, comboBoxDayTo);
                countPage++;
                MessageBox.Show(countPage.ToString());
            }
            if (countPage <= countEmployee)
            {
                e.HasMorePages = true;
            }
            else
            {
                e.HasMorePages = false;
            }

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
4

1 に答える 1

1

PrintPageイベントはページごとに1回発生します。forループは、イベントが発生するたびにすべてのページを印刷しようとしていることを示しています。

ループを削除しfor、インデックス変数iを、現在のページ番号を追跡するために使用できるインスタンスレベルの変数にプロモートする必要があります。

コードの残りの部分は正しいようです。イベントが発生するまで、さらにページをリクエストし続ける必要がありますcountEmployee

于 2012-06-12T08:04:06.823 に答える