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

  1. 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.

  2. Doppelklicken Sie im Bereich Toolbox sowohl auf die Komponente PrintDocument als auch auf die Komponente PrintPreviewDialog, um sie dem Formular hinzuzufügen.

  3. Fügen Sie dem Formular entweder eine Button hinzu, oder verwenden Sie eine Schaltfläche, die sich bereits auf dem Formular befindet.

  4. 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.

  5. Der Click-Ereigniscode sollte angezeigt werden. Fügen Sie außerhalb des Ereignishandlers zwei private Zeichenfolgenvariablen mit den Namen documentContents und stringToPrint 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
    
  6. 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)
    
  7. 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. Das PrintPage -Ereignis wird solange ausgelöst, bis HasMorePages den Wert falsehat. Wenn das Dokument vollständig gerendert wurde, setzen Sie die zu rendernde Zeichenfolge zurück. Achten Sie außerdem darauf, dass das PrintPage-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
    
  8. Legen Sie die Document -Eigenschaft des PrintPreviewDialog -Steuerelements auf die PrintDocument -Komponente im Formular fest.

    printPreviewDialog1.Document = printDocument1;
    
    PrintPreviewDialog1.Document = PrintDocument1
    
  9. 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 das PrintPage-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