2012-04-21 6 views
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; 

       } 


      } 


     } 


    } 

} 

}

答えて

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

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

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

+0

それでした。再帰です。助けてくれてありがとう。 –

+0

再帰ではなく、ページごとに同じイベントハンドラを繰り返し呼び出すだけです。あなたの質問に回答してください。 –

関連する問題