Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In der Windows Forms-Programmierung ist es üblich, zusätzlich zu Druckdiensten die Druckvorschau anzubieten. Eine einfache Möglichkeit, die Druckvorschau zu Ihrer Anwendung hinzuzufügen, ist die Verwendung eines PrintPreviewDialog Steuerelements in Kombination mit PrintPage der Ereignisbehandlungslogik zum Drucken einer Datei.
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 Toolboxbereich auf die PrintDocument Komponente und die PrintPreviewDialog Komponente, um sie dem Formular hinzuzufügen.
Fügen Sie entweder ein
Buttonzum Formular hinzu oder verwenden Sie eine Schaltfläche, die sich bereits im Formular befindet.Wählen Sie im Visual Designer des Formulars die Schaltfläche aus. Wählen Sie im Eigenschaftenbereich die Schaltfläche " Ereignisfilter " aus, und doppelklicken Sie dann auf das
ClickEreignis, um einen Ereignishandler zu generieren.Der
ClickEreigniscode sollte sichtbar sein. Fügen Sie außerhalb des Bereichs des Ereignishandlers der Klasse zwei private Zeichenfolgenvariablen hinzu, diedocumentContentsundstringToPrintheißen.// 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 StringZurück im
Click-Ereignishandlercode, setzen Sie die DocumentName-Eigenschaft auf das Dokument, das Sie drucken möchten, und öffnen und lesen Sie den Inhalt des Dokuments in den String ein, den 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 Sie das Dokument drucken möchten, verwenden Sie im PrintPage Ereignishandler die Graphics Eigenschaft der PrintPageEventArgs Klasse und den Dateiinhalt, um Zeilen pro Seite zu berechnen und den Inhalt des Dokuments zu rendern. Überprüfen Sie nach dem Zeichnen jeder Seite, ob es sich um die letzte Seite handelt, und legen Sie die Eigenschaft von HasMorePages entsprechend der
PrintPageEventArgsfest. DasPrintPage-Ereignis wird solange ausgelöst, bisHasMorePagesden Wertfalsehat. Nachdem das Rendern des Dokuments abgeschlossen ist, setzen Sie die Zeichenfolge zurück, die gerendert werden soll. Stellen Sie außerdem sicher, dass dasPrintPageEreignis der Ereignisbehandlungsmethode zugeordnet ist.Hinweis
Wenn Sie das Drucken in Ihrer Anwendung implementiert haben, wurden die Schritte 5 und 6 möglicherweise bereits abgeschlossen.
Im folgenden Codebeispiel wird der Ereignishandler verwendet, um die Datei "testPage.txt" in derselben 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 SubLegen Sie die Document Eigenschaft des PrintPreviewDialog Steuerelements auf die PrintDocument Komponente im Formular fest.
printPreviewDialog1.Document = printDocument1;PrintPreviewDialog1.Document = PrintDocument1Rufen Sie die ShowDialog Methode für das PrintPreviewDialog Steuerelement auf. Beachten Sie den folgenden hervorgehobenen Code. Sie würden typischerweise ShowDialog aus der Click Ereignisbehandlungsmethode einer Schaltfläche aufrufen. Durch das Aufrufen von ShowDialog wird das PrintPage Ereignis ausgelöst und die Ausgabe im
PrintPreviewDialogSteuerelement gerendert. Wenn der Benutzer das Drucksymbol im Dialogfeld auswählt, wird dasPrintPageEreignis erneut ausgelöst, und die Ausgabe wird anstelle des Vorschaudialogfelds an den Drucker gesendet. Daher wird die Zeichenfolge am Ende des Renderingprozesses in Schritt 4 zurückgesetzt.Das folgende Codebeispiel zeigt die Click Ereignisbehandlungsmethode für eine Schaltfläche im Formular. Die Ereignisbehandlungsmethode ruft die Methoden zum Lesen des Dokuments auf und zeigt das Dialogfeld "Seitenansicht" an.
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