0

右側の余白を確保するために、水平方向または x 位置がカウンターより大きい場合にページを追加しようとしています。コードを実行すると、最初のページに同じグラフィックが表示される数百ページの無限ループに陥ります。私が HasMorePages を理解していないことが関係しているのではないかと考えています。私はいくつかの助けを使うことができます。ありがとう。

    public static class PrintWave
{
    public static void PrintPreWave()
    {

        PrintDocument pd = new PrintDocument();

        if (WaveTools.MySettings == null)
        {
            pd.DefaultPageSettings.Landscape = true;
        }
        else
        {
            pd.DefaultPageSettings = WaveTools.MySettings;
        }
        pd.OriginAtMargins = true;

        pd.PrintPage += new PrintPageEventHandler(OnPrintPage);
        PrintDialog dlg = new PrintDialog();
        PrintPreviewDialog printPreviewDlg = new PrintPreviewDialog();
        printPreviewDlg.Document = pd;

        Form p = (Form)printPreviewDlg;
        p.WindowState = FormWindowState.Maximized;
        printPreviewDlg.ShowDialog();


    }

    private static void OnPrintPage(object sender, PrintPageEventArgs e)
    {
        string MyTag = string.Empty;
        MyTag = WaveActions.ActiveId;
        Wave MyWave = WaveHolder.FindWave(MyTag);
        int MyCount = 0;

        int xOffset = e.MarginBounds.Location.X;

        int yOffset = e.MarginBounds.Location.Y;


        if (MyWave != null)
        {
            Graphics g = e.Graphics;
            g.SetClip(e.PageBounds);

            Pen MyPen = new Pen(WaveTools.WaveColor, WaveTools.PenWidth);

            float dx = (float)e.PageBounds.Width / MyWave.NumSamples;
            float dy = (float)e.PageBounds.Height / 255;


            if (MyWave.Normal == false)
             {
               g.ScaleTransform(dx, dy);

            }



            for (int i = 0; i < MyWave.NumSamples - 1; i++)
            {





                g.DrawLine(MyPen, i, MyWave.Data[i], i + 1, MyWave.Data[i + 1]);
                MyCount = MyCount + 1;

                if (MyCount > e.MarginBounds.Width)
                {

                    e.HasMorePages = true;
                    MyCount = 0; 
                    return;
                }
                else
                {

                    e.HasMorePages = false;
                    return;

                }


            }


        }


    }

}

}

4

1 に答える 1

1
       for (int i = 0; i < MyWave.NumSamples - 1; i++)

PrintPage が呼び出されるたびに 0 から開始します。前のページで中断したところから再開する必要があります。変数iをローカル変数ではなくクラスのフィールドにします。ゼロに設定するには、BeginPrint イベントを実装します。

ループ内の else 句は削除する必要があります。

于 2012-04-21T21:50:16.800 に答える