Inhalt einer Listbox drucken

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von HDebus.

    habe es herausbekommen

    VB.NET-Quellcode

    1. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    2. PrintPreviewDialog1.Document = PrintDocument1
    3. PrintPreviewDialog1.ShowDialog()
    4. End Sub
    5. Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
    6. Dim startX As Integer = 62
    7. Dim startY As Integer = 62
    8. For x As Integer = 0 To ListBox1.Items.Count - 1
    9. e.Graphics.DrawString(ListBox1.Items(x).ToString, ListBox1.Font, Brushes.Black, startX, startY)
    10. startY += ListBox1.ItemHeight
    11. Next
    12. End Sub
    @HDebus Jou.
    Du wirst Probleme bekommen, wenn Du mehr Items hast, als auf eine Seite passen. Gugst Du Drucken mehrseitiger Dokumente.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo,

    ich versuche nun gerade den mehrseitigen ausdruck hinzubekommen anhand des links.

    Leider bleibt bei mir immer die Seite leer schon nur beim Anfang

    Hier mal meine Codes

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private pageNb As Integer = 0 ' aktuelle Seitennummer
    3. Private indexText As Integer = 0


    VB.NET-Quellcode

    1. Private Sub PrintDocument2_BeginPrint(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintEventArgs) Handles PrintDocument2.BeginPrint
    2. Me.pageNb = 0 ' aktuelle Seitennummer
    3. Me.indexText = 0 ' Startposition der aktuellen Seite im Text
    4. End Sub


    VB.NET-Quellcode

    1. Private Sub PrintDocument2_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument2.PrintPage
    2. Dim g = e.Graphics
    3. g.DrawString(String.Format("Seite {0}", Me.pageNb + 1), New Font("arial", 20), Brushes.Black, New Point(10, 10))
    4. Dim rc = g.VisibleClipBounds ' der Druckbereich
    5. Dim txt = Me.ListBox1.Text ' brauchen wir noch öfter
    6. Dim ft = New Font("Arial", 10) ' der Druck-Font
    7. g.DrawString(txt.Substring(Me.indexText), ft, Brushes.Black, rc)
    8. End Sub


    Und der Aufruf

    VB.NET-Quellcode

    1. Private Sub Drucken2ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Drucken2ToolStripMenuItem.Click
    2. PrintPreviewDialog2.Document = PrintDocument2
    3. PrintPreviewDialog2.ShowDialog()
    4. End Sub


    Leider bleibt bei mir die Seite immer leer. Kann das daran liegen, weil ich keine RichText sondern eine Listbox benutze?


    Danke für die Hilfe
    Holger
    Bilder
    • fehler.PNG

      23,38 kB, 414×339, 243 mal angesehen
    Ich habe das ganze nun mit einer RichTextBox umgestaltet was auch erstmal läuft, aber der Druck sieht immer noch sehr bescheiden aus woran liegt das?

    VB.NET-Quellcode

    1. Dim g = e.Graphics
    2. g.DrawString(String.Format("Seite {0}", Me.pageNb + 1), New Font("arial", 20), Brushes.Black, New Point(10, 10))
    3. Dim rc = g.VisibleClipBounds ' der Druckbereich
    4. Dim txt = Me.RT1.Text ' brauchen wir noch öfter
    5. Dim ft = New Font("Arial", 10) ' der Druck-Font
    6. g.DrawString(txt.Substring(Me.indexText), ft, Brushes.Black, rc)
    7. Dim margin = Me.PrintDocument2.DefaultPageSettings.Margins
    8. rc.Offset(margin.Left, margin.Top) ' obere linke Ecke
    9. rc.Width -= (margin.Left + margin.Right) ' neue Breite
    10. rc.Height -= (margin.Top + margin.Bottom) ' neue Höhe
    11. ' System.Drawing.StringFormat, das Formatierungsinformationen für die Zeichenfolge darstellt.
    12. Dim stringFormat As New StringFormat(StringFormatFlags.LineLimit) ' Bestimmung der Zeilenanzahl
    13. ' Anzahl der Zeichen in der Zeichenfolge, die auf einmal gedruckt wird
    14. ' Zielgröße, abhängig von Font und Rechteck
    15. Dim charactersFitted As Integer
    16. ' Anzahl der Textzeilen in der Zeichenfolge, wird hier nicht weiter verwendet
    17. Dim linesFilled As Integer
    18. ' Bestimmung der Anzahl der druckbaren Zeichen
    19. e.Graphics.MeasureString(txt.Substring(Me.indexText), ft, rc.Size, stringFormat, charactersFitted, linesFilled)
    20. ' Druck des Textes, wegen StringFormatFlags.LineLimit werden keine (höhen-)halben Zeilen gedruckt
    21. e.Graphics.DrawString(txt.Substring(Me.indexText), ft, Brushes.Black, rc, stringFormat)
    22. ' Festlegen der Text-Startposition der nächsten Seite
    23. Me.indexText += charactersFitted
    24. ' bestimmen, ob es überhaupt weitere Seiten gibt
    25. e.HasMorePages = Me.indexText < txt.Length
    26. ' die nächste Seitennummer
    27. Me.pageNb += 1


    Druckbild angehangen

    Danke für Eure Hilfe Holger
    Bilder
    • Fehler2.PNG

      102,1 kB, 943×417, 256 mal angesehen

    HDebus schrieb:

    VB.NET-Quellcode

    1. g.DrawString(txt.Substring(Me.indexText), ft, Brushes.Black, rc)

    HDebus schrieb:

    VB.NET-Quellcode

    1. e.Graphics.DrawString(txt.Substring(Me.indexText), ft, Brushes.Black, rc, stringFormat)
    Wenn Du zwei Mal den Text druckst, ist er auch zwei Mal auf der Seite zu sehen. ;)
    Lösche die obere der beiden Zeilen.
    Bei mir hat das ganze mit 4 Seiten ordentlich funktioniert.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!