Buongiorno a tutti,
ho provato a cercare sul forum una sezione sul comando HasMorePage, ma nonostante gli articoli fossero molti, la mia inesperienza non mi permette di trarne una soluzione finalizzata al mio caso.

Ho inserito in un unico form, una RTB e una PictureBox . In poche parole devo creare una scheda tecnica dove nella prima pagina dovrà essere stampata la descrizione del macchinario e nella seconda pagina un disegno quotato.

Il mio problema è che al momento della stampa l'immagine della PictureBox, si sovrappone alla RTB iniziale.

Quando mando in debug la soluzione, lo scorrimento tra la RTB e la picturebox avviene tramite 2 pulsanti di comando denominati "avanti" e "indietro", che permettono di simulare lo scorrere delle pagine nascondendo e visualizzando i suddetti componenti.

Riporto qui di seguito il codice:


Imports System.Drawing.Printing
Public Class frmSchedaTecnica11
Dim StringToPrint As String


'Disabilito il comando "indietro" poichè è visualizzata la prima pagina (la richtextbox denominata TxtSchedaTecnica)

cmdIndietro.Enabled = False


'Formatto la RTB

With TxtSchedaTecnica
.Dock = DockStyle.Fill
.Multiline = True
.BackColor = Color.White
.ScrollBars = ScrollBars.Vertical
End With

'Inserisco il testo nella RTB

' String 1
Dim Position As Int16 = 0
Dim String1 As String = vbCr & vbCr & "Testo da inserire" & vbNewLine
Dim myFont As New Font("Verdana", 9, FontStyle.Bold, GraphicsUnit.Point)
Dim myColor As Color = Color.Black
TxtSchedaTecnica.Select(Position, 0)
TxtSchedaTecnica.SelectionFont = myFont
TxtSchedaTecnica.SelectionColor = myColor
TxtSchedaTecnica.SelectedText = String1
Position += String1.Length
'String 2
String1 = "Altro testo da inserire con formattazione differente" & vbNewLine
myFont = New Font("Verdana", 9, FontStyle.Regular, GraphicsUnit.Point)
myColor = Color.Black
TxtSchedaTecnica.Select(Position, 0)
TxtSchedaTecnica.SelectionFont = myFont
TxtSchedaTecnica.SelectionColor = myColor
TxtSchedaTecnica.SelectedText = String1
Position += String1.Length

'Se clicco su "avanti" nascondo la RTB, e visualizzo la PictureBox che dovrà essere stampata su una seconda pagina

Private Sub cmdAvanti_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdAvanti.Click
TxtSchedaTecnica.Hide()
PictureBox1.Show()
cmdAvanti.Enabled = False
cmdIndietro.Enabled = True
End Sub

'Se clicco su "indietro" nascondo la PictureBox, e visualizzo la TextBox che dovrà essere stampata sulla prima pagina


Private Sub cmdIndietro_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdIndietro.Click
PictureBox1.Hide()
TxtSchedaTecnica.Show()
cmdIndietro.Enabled = False
cmdAvanti.Enabled = True
End Sub


'Questo codice non so cosa sia, l'ho copiato da un forum e funziona


Private Sub Stampa_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Stampa.Click
StringToPrint = TxtSchedaTecnica.Text
Dim PrintDialog1 As New PrintDialog()
PrintDialog1.Document = PrintDocument1
Dim result As DialogResult = PrintDialog1.ShowDialog()
If (result = DialogResult.OK) Then
PrintDocument1.Print()
End If
End Sub

'Stessa cosa di sopra

Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage


Dim numChars As Integer
Dim numLines As Integer
Dim stringForPage As String
Dim strFormat As New StringFormat()
Dim PrintFont As Font
PrintFont = TxtSchedaTecnica.Font
Dim rectDraw As New RectangleF(e.MarginBounds.Left, 180, e.MarginBounds.Width, 850)
Dim sizeMeasure As New SizeF(e.MarginBounds.Width, 850 - PrintFont.GetHeight(e.Graphics))
strFormat.Trimming = StringTrimming.Word
e.Graphics.MeasureString(StringToPrint, PrintFont, sizeMeasure, strFormat, numChars, numLines)
stringForPage = StringToPrint.Substring(0, numChars)
e.Graphics.DrawString(stringForPage, PrintFont, Brushes.Black, rectDraw, strFormat)
e.Graphics.DrawImage(Image.FromFile("C:\Users\.... ..\Documents\Visual Studio 2010\Projects\BEKOSPLIT\BEKOSPLIT\Immagini\Testata .bmp"), 0, 0)
e.Graphics.DrawImage(Image.FromFile("C:\Users\.... ..\Documents\Visual Studio 2010\Projects\BEKOSPLIT\BEKOSPLIT\Immagini\Piè.bmp "), 0, 1070)

e.HasMorePages = True

e.Graphics.DrawImage(PictureBox1.Image, 0, 180)

e.HasMorePages = False

End Sub


Ringrazio anticipatamente per l'aiuto!