Salve a tutti.
vorrei fare una stampa di una listview ma sto avendo problemi con la stampa su + pagine. non sono sicuro di aver capito benissimo l'uso di e.hasmorepages e pertanto ho molti problemi.

per esempio ho postato il codice (che potete provare incollandolo tutto in un nuovo progetto) che dovrebbe stampare l'intestazione della mia listview su più pagine ma invece di cambiare pagina mi sovrascrive sempre sulla stessa.... come mai?


codice:
Public Class Form1
    Inherits System.Windows.Forms.Form

#Region " Codice generato da Progettazione Windows Form "

    Public Sub New()
        MyBase.New()
      InitializeComponent()
   End Sub

   Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
      If disposing Then
         If Not (components Is Nothing) Then
            components.Dispose()
         End If
      End If
      MyBase.Dispose(disposing)
   End Sub

   Private components As System.ComponentModel.IContainer

   Friend WithEvents ListView1 As System.Windows.Forms.ListView
   Friend WithEvents Button1 As System.Windows.Forms.Button
   <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
      Me.ListView1 = New System.Windows.Forms.ListView()
      Me.Button1 = New System.Windows.Forms.Button()
      Me.SuspendLayout()
      '
      'ListView1
      '
      Me.ListView1.Anchor = (((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
                  Or System.Windows.Forms.AnchorStyles.Left) _
                  Or System.Windows.Forms.AnchorStyles.Right)
      Me.ListView1.Location = New System.Drawing.Point(16, 16)
      Me.ListView1.Name = "ListView1"
      Me.ListView1.Size = New System.Drawing.Size(368, 288)
      Me.ListView1.TabIndex = 0
      Me.ListView1.View = System.Windows.Forms.View.Details
      '
      'Button1
      '
      Me.Button1.Location = New System.Drawing.Point(328, 312)
      Me.Button1.Name = "Button1"
      Me.Button1.Size = New System.Drawing.Size(56, 24)
      Me.Button1.TabIndex = 1
      Me.Button1.Text = "print"
      '
      'Form1
      '
      Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
      Me.ClientSize = New System.Drawing.Size(400, 342)
      Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.Button1, Me.ListView1})
      Me.Name = "Form1"
      Me.Text = "Form1"
      Me.ResumeLayout(False)

   End Sub

#End Region

   Dim WithEvents pDoc As Printing.PrintDocument

   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      Dim i As Integer, x As Integer, y As Integer
      Dim item As ListViewItem
      For i = 1 To 10
         ListView1.Columns.Add("Colonna " & Str(i), 100, HorizontalAlignment.Left)
      Next
      For x = 1 To 200
         item = ListView1.Items.Add("Item " & Str(x))
         For y = 1 To 9
            item.SubItems.Add("Subitem " & Str(y))
         Next
      Next
   End Sub

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      Dim PrintDialog1 As New PrintDialog()
      pDoc = New Printing.PrintDocument()
      PrintDialog1.Document = pDoc
      PrintDialog1.AllowSomePages = True
      If PrintDialog1.ShowDialog() = DialogResult.OK Then
         pDoc.Print()
      End If
   End Sub

   Private Sub pDoc_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles pDoc.PrintPage
      Dim i As Integer = 0
      Dim myfont As New Font("Verdana", 10, FontStyle.Regular, GraphicsUnit.Pixel)
      Dim ColWidth As Integer = 0
      Dim PrintRect As Rectangle = e.MarginBounds
      Dim posX As Integer = PrintRect.Left

      e.Graphics.DrawLine(New Pen(Color.Black), PrintRect.Left, PrintRect.Top, PrintRect.Right, PrintRect.Top)
      e.Graphics.DrawLine(New Pen(Color.Black), PrintRect.Left, PrintRect.Top + myfont.Height, PrintRect.Right, PrintRect.Top + myfont.Height)

      While i < ListView1.Columns.Count
         ColWidth = ListView1.Columns(i).Width
         e.Graphics.DrawString(ListView1.Columns(i).Text, myfont, New SolidBrush(Color.Black), posX, PrintRect.Top)
         e.Graphics.DrawLine(New Pen(Color.Black), posX + ColWidth, PrintRect.Top, posX + ColWidth, PrintRect.Top + myfont.Height)
         posX = posX + ColWidth
         i = i + 1
         If (posX > PrintRect.Right) Then
            e.HasMorePages = True
            posX = PrintRect.Left
         End If
      End While
      If i = ListView1.Columns.Count Then e.HasMorePages = False
   End Sub


End Class