Drucken mithilfe der Seitenansicht (Windows Forms .NET)
Es ist üblich, in Windows Forms-Programmen zusätzlich zu Druckdiensten eine Seitenansicht zur Verfügung zu stellen. Eine einfache Möglichkeit, Dienste für Seitenansichten zu Ihrer Anwendung hinzufügen, besteht darin, ein PrintPreviewDialog -Steuerelement in Kombination mit der Behandlungslogik für PrintPage -Ereignisse zu verwenden, um eine Datei zu drucken.
So zeigen Sie eine Vorschau eines Textdokuments mit einem PrintPreviewDialog-Steuerelement an
Verwenden Sie in Visual Studio den Projektmappen-Explorer-Bereich, und doppelklicken Sie auf das Formular, aus dem Sie drucken möchten. Dadurch wird der Visual Designer geöffnet.
Doppelklicken Sie im Bereich Toolbox sowohl auf die Komponente PrintDocument als auch auf die Komponente PrintPreviewDialog, um sie dem Formular hinzuzufügen.
Fügen Sie dem Formular entweder eine
Button
hinzu, oder verwenden Sie eine Schaltfläche, die sich bereits auf dem Formular befindet.Wählen Sie im Visual Designer des Formulars die Schaltfläche aus. Wählen Sie im Bereich Eigenschaften die Filterschaltfläche Ereignis aus, und doppelklicken Sie dann auf das Ereignis
Click
, um einen Ereignishandler zu generieren.Der
Click
-Ereigniscode sollte angezeigt werden. Fügen Sie außerhalb des Ereignishandlers zwei private Zeichenfolgenvariablen mit den NamendocumentContents
undstringToPrint
zu der Klasse hinzu:// Declare a string to hold the entire document contents. private string documentContents=""; // Declare a variable to hold the portion of the document that // is not printed. private string stringToPrint="";
' Declare a string to hold the entire document contents. Private documentContents As String ' Declare a variable to hold the portion of the document that ' is not printed. Private stringToPrint As String
Nachdem Sie im Ereignishandler
Click
die Eigenschaft DocumentName auf das zu druckende Dokument festgelegt haben, öffnen Sie das Dokument und lesen dessen Inhalt in die Zeichenfolge, die Sie zuvor hinzugefügt haben.string docName = "testPage.txt"; string docPath = @"C:\"; string fullPath = System.IO.Path.Combine(docPath, docName); printDocument1.DocumentName = docName; stringToPrint = System.IO.File.ReadAllText(fullPath);
Dim docName As String = "testPage.txt" Dim docPath As String = "C:\Users\v-rsatao\Desktop\" Dim fullPath As String = System.IO.Path.Combine(docPath, docName) PrintDocument1.DocumentName = docName stringToPrint = System.IO.File.ReadAllText(fullPath)
Wie beim Drucken des Dokuments verwenden Sie im PrintPage -Ereignishandler die Graphics -Eigenschaft der PrintPageEventArgs -Klasse und den Dateiinhalt, um Zeilen pro Seite zu berechnen und den Dokumentinhalt zu rendern. Nachdem eine Seite gezeichnet ist, überprüfen Sie, ob sie die letzte Seite ist, und legen Sie die HasMorePages-Eigenschaft von
PrintPageEventArgs
entsprechend fest. DasPrintPage
-Ereignis wird solange ausgelöst, bisHasMorePages
den Wertfalse
hat. Wenn das Dokument vollständig gerendert wurde, setzen Sie die zu rendernde Zeichenfolge zurück. Achten Sie außerdem darauf, dass dasPrintPage
-Ereignis seiner Ereignisbehandlungsmethode zugeordnet ist.Hinweis
Wenn Sie das Drucken in Ihrer Anwendung implementiert haben, haben Sie Schritt 5 und 6 möglicherweise bereits abgeschlossen.
Im folgenden Codebeispiel wird der Ereignishandler verwendet, um die Datei "testPage.txt" mit der Schriftart zu drucken, die im Formular verwendet wird.
void PrintDocument1_PrintPage(object sender, PrintPageEventArgs e) { int charactersOnPage = 0; int linesPerPage = 0; // Sets the value of charactersOnPage to the number of characters // of stringToPrint that will fit within the bounds of the page. e.Graphics.MeasureString(stringToPrint, this.Font, e.MarginBounds.Size, StringFormat.GenericTypographic, out charactersOnPage, out linesPerPage); // Draws the string within the bounds of the page. e.Graphics.DrawString(stringToPrint, this.Font, Brushes.Black, e.MarginBounds, StringFormat.GenericTypographic); // Remove the portion of the string that has been printed. stringToPrint = stringToPrint.Substring(charactersOnPage); // Check to see if more pages are to be printed. e.HasMorePages = (stringToPrint.Length > 0); // If there are no more pages, reset the string to be printed. if (!e.HasMorePages) stringToPrint = documentContents; }
Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As PrintPageEventArgs) Handles PrintDocument1.PrintPage Dim charactersOnPage As Integer = 0 Dim linesPerPage As Integer = 0 ' Sets the value of charactersOnPage to the number of characters ' of stringToPrint that will fit within the bounds of the page. e.Graphics.MeasureString(stringToPrint, Me.Font, e.MarginBounds.Size, StringFormat.GenericTypographic, charactersOnPage, linesPerPage) ' Draws the string within the bounds of the page. e.Graphics.DrawString(stringToPrint, Me.Font, Brushes.Black, e.MarginBounds, StringFormat.GenericTypographic) ' Remove the portion of the string that has been printed. stringToPrint = StringToPrint.Substring(charactersOnPage) ' Check to see if more pages are to be printed. e.HasMorePages = stringToPrint.Length > 0 ' If there are no more pages, reset the string to be printed. If Not e.HasMorePages Then stringToPrint = documentContents End If End Sub
Legen Sie die Document -Eigenschaft des PrintPreviewDialog -Steuerelements auf die PrintDocument -Komponente im Formular fest.
printPreviewDialog1.Document = printDocument1;
PrintPreviewDialog1.Document = PrintDocument1
Rufen Sie die ShowDialog -Methode für das PrintPreviewDialog -Steuerelement auf. Beachten Sie den unten hervorgehobenen Code. Normalerweise würden Sie ShowDialog von der Click-Ereignisbehandlungsmethode einer Schaltfläche aufrufen. Das Aufrufen von ShowDialog löst das PrintPage -Ereignis aus und rendert die Ausgabe im
PrintPreviewDialog
-Steuerelement. Wählt der Benutzer im Dialogfeld das Symbol für Drucken aus, wird dasPrintPage
-Ereignis erneut ausgelöst und die Ausgabe an den Drucker anstatt an das Dialogfeld „Seitenansicht“ gesendet. Aus diesem Grund wird die Zeichenfolge am Ende des Renderingprozesses in Schritt 4 zurückgesetzt.Im folgenden Codebeispiel wird die Click -Ereignisbehandlungsmethode für eine Schaltfläche auf dem Formular gezeigt. Die Ereignisbehandlungsmethode ruft die Methoden auf, mit denen das Dokument gelesen und das Dialogfeld „Seitenansicht“ angezeigt wird.
private void Button1_Click(object sender, EventArgs e) { string docName = "testPage.txt"; string docPath = @"C:\"; string fullPath = System.IO.Path.Combine(docPath, docName); printDocument1.DocumentName = docName; stringToPrint = System.IO.File.ReadAllText(fullPath); printPreviewDialog1.Document = printDocument1; printPreviewDialog1.ShowDialog(); }
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim docName As String = "testPage.txt" Dim docPath As String = "C:\Users\v-rsatao\Desktop\" Dim fullPath As String = System.IO.Path.Combine(docPath, docName) PrintDocument1.DocumentName = docName stringToPrint = System.IO.File.ReadAllText(fullPath) PrintPreviewDialog1.Document = PrintDocument1 PrintPreviewDialog1.ShowDialog() End Sub
Siehe auch
.NET Desktop feedback
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für