Freigeben über


Drucken mithilfe der Seitenansicht

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

  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 Toolboxbereich auf die PrintDocument Komponente und die PrintPreviewDialog Komponente, um sie dem Formular hinzuzufügen.

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

  4. 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 Click Ereignis, um einen Ereignishandler zu generieren.

  5. Der Click Ereigniscode sollte sichtbar sein. Fügen Sie außerhalb des Bereichs des Ereignishandlers der Klasse zwei private Zeichenfolgenvariablen hinzu, die documentContents und stringToPrint heiß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 String
    
  6. Zurü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)
    
  7. 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 PrintPageEventArgs fest. Das PrintPage-Ereignis wird solange ausgelöst, bis HasMorePages den Wert false hat. Nachdem das Rendern des Dokuments abgeschlossen ist, setzen Sie die Zeichenfolge zurück, die gerendert werden soll. Stellen Sie außerdem sicher, dass das PrintPage Ereignis 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 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 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 PrintPreviewDialog Steuerelement gerendert. Wenn der Benutzer das Drucksymbol im Dialogfeld auswählt, wird das PrintPage Ereignis 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