title: PrintDocument over-writes all but last page
body: <p>The problem I'm having is that while printing a multi-page document, each page will over-strike the other with the exception of the last page.  It's almost as if it's not clearing the contents of the page before starting a new one.</p>
  
  <p>I've reduced it to the smallest amount of code and I still can't get it to behave properly.</p>
  
  <p>Here's what the PrintPage code looks like:</p>
  
  <pre><code>Private Sub printDoc_printExceptionPage(sender As Object, e As System.Drawing.Printing.PrintPageEventArgs) Handles printDoc.PrintPage
      Dim printFont As New Font("Courier New", 9, FontStyle.Regular)
      Dim lineHeight As Single = 0 
      Dim xpos As Single = e.MarginBounds.Left
      Dim ypos As Single = e.MarginBounds.Top
  
      If lineIndex = docRec.Count Then
          e.HasMorePages = False
          Exit Sub
      End If
  
      printFont = New Font("Courier New", 9, FontStyle.Regular)
      lineHeight = printFont.GetHeight(e.Graphics)
  
      While lineIndex &lt; docRec.Count
          e.Graphics.DrawString(docRec.Item(lineIndex), printFont, Brushes.Black, xpos, ypos, New StringFormat())
          ypos += lineHeight
          lineIndex += 1
          If lineIndex Mod 35 = 0 Then
              pageCount += 1
              e.HasMorePages = True
              Exit Sub
          End If
      End While
  End Sub
  </code></pre>
  
  <p>docRec is a simple list of strings that contains the lines of the output - it's declared as "dim docRec as new List(of String)" and populated earlier.</p>
  
  <p>I'm all out of guesses at this point and apparently my Google Fu has failed me because I can't find another instance of this issue anywhere.</p>
  
  <p>On the off chance that the code that initiates the print is relevant, here it is in all it's hacked up glory:</p>
  
  <pre><code>    PrintDlg.AllowPrintToFile = False
      PrintDlg.PrinterSettings = New PrinterSettings
      Dim test As New PrintPreviewDialog
      printDoc = New PrintDocument
      printDoc.PrinterSettings.DefaultPageSettings.Landscape = True
      If PrintDlg.ShowDialog = Windows.Forms.DialogResult.OK Then
          AddHandler printDoc.PrintPage, AddressOf printDoc_printExceptionPage
          printDoc.DefaultPageSettings.Landscape = True
          BuildDoc()
          lineIndex = 1
          pageCount = 1
          'printDoc.Print()
          test.Document = printDoc
          test.ShowDialog()
      End If
  </code></pre>
  
  <p>Thanks for your help!</p>
  
  <p>g.</p>
  
  <p>[edit]
  I modified the following code to add a stream of debug info to see how things were being executed.  </p>
  
  <pre><code>        While lineIndex &lt; docRec.Count
          Debug.Print("ypos (" + CStr(ypos) + ") line:" + CStr(lineIndex))
          e.Graphics.DrawString(docRec.Item(lineIndex), printFont, Brushes.Black, xpos, ypos, New StringFormat())
          ypos += printFont.GetHeight(e.Graphics)
          lineIndex += 1
          If lineIndex Mod 35 = 0 Then 'If lineTop + lineHeight &gt; e.MarginBounds.Bottom Then
              Debug.Print("done with page " + CStr(pageCount))
              pageCount += 1
              e.HasMorePages = True
              Exit Sub
          End If
  
      End While
  </code></pre>
  
  <p>Here's the output from that:</p>
  
  <pre><code>ypos (0) line:1
  ypos (14.16015) line:2
  ypos (28.32031) line:3
  ypos (42.48046) line:4
  ypos (56.64062) line:5
  ypos (70.80077) line:6
  ypos (84.96093) line:7
  ypos (99.12109) line:8
  ypos (113.2812) line:9
  ypos (127.4414) line:10
  ypos (141.6015) line:11
  ypos (155.7617) line:12
  ypos (169.9219) line:13
  ypos (184.082) line:14
  ypos (198.2422) line:15
  ypos (212.4023) line:16
  ypos (226.5625) line:17
  ypos (240.7226) line:18
  ypos (254.8828) line:19
  ypos (269.0429) line:20
  ypos (283.2031) line:21
  ypos (297.3633) line:22
  ypos (311.5234) line:23
  ypos (325.6836) line:24
  ypos (339.8437) line:25
  ypos (354.0039) line:26
  ypos (368.164) line:27
  ypos (382.3242) line:28
  ypos (396.4843) line:29
  ypos (410.6445) line:30
  ypos (424.8047) line:31
  ypos (438.9648) line:32
  ypos (453.125) line:33
  ypos (467.2851) line:34
  done with page 1
  ypos (0) line:35
  ypos (14.16015) line:36
  ypos (28.32031) line:37
  ypos (42.48046) line:38
  ypos (56.64062) line:39
  ypos (70.80077) line:40
  ypos (84.96093) line:41
  ypos (99.12109) line:42
  ypos (113.2812) line:43
  ypos (127.4414) line:44
  ypos (141.6015) line:45
  ypos (155.7617) line:46
  ypos (169.9219) line:47
  ypos (184.082) line:48
  ypos (198.2422) line:49
  ypos (212.4023) line:50
  ypos (226.5625) line:51
  ypos (240.7226) line:52
  ypos (254.8828) line:53
  ypos (269.0429) line:54
  ypos (283.2031) line:55
  ypos (297.3633) line:56
  ypos (311.5234) line:57
  ypos (325.6836) line:58
  ypos (339.8437) line:59
  ypos (354.0039) line:60
  ypos (368.164) line:61
  ypos (382.3242) line:62
  </code></pre>
  
  <p>The line count is smaller in this example and it generates two pages, the second of which over-writes the contents of the first.</p>