Hallo Leute,
vielleicht kann mir ja jemand bei meinem kleinen Problem helfen,
Ich möchte gerne den Inhalt einer ListBox ausdrucken die unterschiedlich viele Einträge haben kann leider habe ich so gut wie keine Erfahrung mit dem Drucken. Folgendes habe ich mir zusammengebastelt aber, leider wird mir in der Druckvorschau bei einer Seite alles richtig angezeigt und wenn ich mehr als eine Seite zum Drucken habe wird der Rest auch auf die erste Seite gemacht.
Hier der Code:
#Region "Print"
Private Sub document_PrintPage(ByVal sender As Object, ByVal e As _
System.Drawing.Printing.PrintPageEventArgs) _
Handles docToPrint.PrintPage
Dim rect As New Rectangle( _
PrintDocument1.DefaultPageSettings.PrintableArea.X, _
PrintDocument1.DefaultPageSettings.PrintableArea.Y, _
PrintDocument1.DefaultPageSettings.PrintableArea.Width, _
PrintDocument1.DefaultPageSettings.PrintableArea.Height)
Dim bolfertig As Boolean = False
Dim ZeilenHöhe As Double = 0
Dim index As Integer = 0
Dim X As Double = rect.X
Dim Y As Double = rect.Y
Dim Breite As Double = rect.Width
Dim Höhe As Double = rect.Height
Dim NameSize, TextSize As New SizeF
Dim Font_Caption As New Font("Comic Sans MS", 12, FontStyle.Underline _
Or FontStyle.Bold)
Dim font_Text As New Font(Me.lstSongs.Font, FontStyle.Regular)
NameSize = e.Graphics.MeasureString("Überschrift", Font_Caption)
e.Graphics.DrawString("Überschrift", Font_Caption, Brushes.Black, ( _
Breite / 2) - (NameSize.Width / 2), 25)
ZeilenHöhe = 30 + NameSize.Height
For i As Integer = 0 To Me.lstSongs.Items.Count - 1
TextSize = e.Graphics.MeasureString((Me.lstSongs.Items( _
i).ToString), font_Text)
e.Graphics.DrawString(Me.lstSongs.Items(i).ToString, font_Text, _
Brushes.Black, X + 25, ZeilenHöhe)
ZeilenHöhe = ZeilenHöhe + TextSize.Height
If ZeilenHöhe >= (Höhe - TextSize.Height) Then
index = i
bolfertig = True
e.HasMorePages = True
Exit For
End If
Next
If Not index = 0 Then
e.Graphics.DrawString("Überschrift", Font_Caption, Brushes.Black, ( _
Breite / 2) - (NameSize.Width / 2), 25)
ZeilenHöhe = 30 + NameSize.Height
For i As Integer = index To Me.lstSongs.Items.Count - 1
TextSize = e.Graphics.MeasureString((Me.lstSongs.Items( _
i).ToString), font_Text)
e.Graphics.DrawString(Me.lstSongs.Items(i).ToString, font_Text, _
Brushes.Black, X + 25, ZeilenHöhe)
ZeilenHöhe = ZeilenHöhe + TextSize.Height
Next
bolfertig = False
End If
e.HasMorePages = bolfertig
End Sub
Public Function OutPutSize(ByVal S As SizeF, ByVal B As Double) As Double
Dim H As Double
If S.Width > B Then
H = (S.Width / B) * S.Height
Else
H = S.Height
End If
Return H
End Function
Private Sub DruckVorschauToolStripMenuItem_Click(ByVal sender As _
System.Object, ByVal e As System.EventArgs) Handles _
DruckVorschauToolStripMenuItem.Click
Me.PrintPreviewDialog1 = New PrintPreviewDialog
With Me.PrintPreviewDialog1
.Document = docToPrint
.UseAntiAlias = True
.ShowDialog()
End With
End Sub
Private Sub DruckenToolStripMenuItem1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles DruckenToolStripMenuItem1.Click
PrintDialog1.AllowSomePages = True
PrintDialog1.ShowHelp = True
PrintDialog1.Document = docToPrint
Dim result As DialogResult = PrintDialog1.ShowDialog()
If (result = Windows.Forms.DialogResult.OK) Then
docToPrint.Print()
End If
End Sub
#End Region Vielen Dank vorab
Gruß Christian
Wer Rechtschreibfehler findet darf Sie behalten |