Rubrik: Drucker | VB-Versionen: VB.NET | 12.06.06 |
MultiLine TextBox drucken (VB.NET 2005) Klasse zum Drucken einer MultiLine TextBox | ||
Autor: lighty | Bewertung: | Views: 25.435 |
ohne Homepage | System: WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Dieser Tipp zeigt Ihnen wie Sie einen sehr großen Text einer TextBox mit der Eigenschaft "MultiLine = True" ausdrucken können.
Benötigte Komponenten
Ziehen Sie folgende Controls auf die Form:
- 1 x TextBox (MultiLine = True)
- 1 x Button (Text = "Drucken")
- 1 x PrintDocument
Fügen Sie folgenden Code in den Codeteil der Form ein:
Public Class Form1 Inherits System.Windows.Forms.Form ' Verweis auf unsere TextDrucken-Klasse Dim TextDrucken As New TextBoxDrucken Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ' Ausdruck starten PrintDocument1.Print() End Sub Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, _ ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage ' Druckauftrag an die TextDrucken-Klasse weiterleiten TextDrucken.Print(PrintDocument1, TextBox1, Brushes.Red, "Monotype Corsiva", 12, FontStyle.Italic, e) End Sub End Class
Fügen Sie dem Projekt ein neues Klassenmodul hinzu und kopieren folgenden Code in den Codeteil der Klasse:
Imports System.Drawing Imports System.Drawing.Printing Imports System.Windows.Forms Public Class TextBoxDrucken Dim PosInStr As Integer Dim IsPrinting As Boolean Dim Coll As New List(Of String) Public Sub Print(ByVal Document As PrintDocument, ByVal TextBox As TextBox, ByVal ForeColor As Brush, _ ByVal Font As String, ByVal FontSize As Integer, ByVal FontStyle As FontStyle, ByVal e As PrintPageEventArgs) Dim left As Decimal = Document.DefaultPageSettings.Margins.Left Dim right As Decimal = Document.DefaultPageSettings.Margins.Right Dim top As Decimal = Document.DefaultPageSettings.Margins.Top Dim bottom As Decimal = Document.DefaultPageSettings.Margins.Bottom Dim pagewidth As Integer = Document.DefaultPageSettings.Bounds.Width - right Dim pageheight As Integer = Document.DefaultPageSettings.Bounds.Height - bottom Dim rect As New Rectangle(left, top, 0.0, 0.0) Dim f As New Font(TextBox.Font.ToString, TextBox.Font.Size, TextBox.Font.Style) Dim brush As New SolidBrush(TextBox.ForeColor) Dim StrIn As String Dim StrInSize As SizeF If IsPrinting = False Then StrIn = TextBox.Text For i As Integer = 0 To Len(StrIn) If i < Len(StrIn) Then Coll.Add(StrIn.Substring(i, 1)) ElseIf i = Len(StrIn) Then Coll.Add(StrIn.Substring(i)) End If Next IsPrinting = True End If If IsPrinting = True Then For i As Integer = PosInStr To Coll.Count - 1 StrIn = Coll.Item(i).ToString StrInSize = e.Graphics.MeasureString(StrIn, f, 8, StringFormat.GenericTypographic) rect.Width = StrInSize.Width e.Graphics.DrawString(StrIn, f, brush, rect.X, rect.Y) If rect.X + StrInSize.Width < pagewidth Then rect.X += StrInSize.Width ElseIf rect.X + StrInSize.Width >= pagewidth Then rect.X = left rect.Y += StrInSize.Height End If If rect.Y + StrInSize.Height > pageheight Then PosInStr = i + 1 e.HasMorePages = True Exit For ElseIf rect.Y + StrInSize.Height < pageheight Then e.HasMorePages = False If i = Coll.Count - 1 Then IsPrinting = False Coll.Clear() PosInStr = 0 End If End If Next End If End Sub End Class