Partager via


Imprimer à l’aide de l’aperçu avant impression (Windows Forms .NET)

Il est courant dans la programmation Windows Forms d’offrir un aperçu avant impression en plus des services d’impression. L'un des moyens les plus simples pour ajouter des services d'aperçu avant impression à votre application consiste à utiliser un contrôle PrintPreviewDialog avec la logique de gestion d'événements PrintPage pour l'impression d'un fichier.

Pour afficher un aperçu d'un document texte avec un contrôle PrintPreviewDialog

  1. Dans Visual Studio, utilisez le volet Explorateur de solutions et double-cliquez sur le formulaire à partir duquel vous souhaitez imprimer. Cela ouvre le Concepteur visuel.

  2. Dans le volet Boîte à outils , double-cliquez sur le PrintDocument composant et le PrintPreviewDialog composant pour les ajouter au formulaire.

  3. Ajoutez un Button formulaire ou utilisez un bouton qui figure déjà sur le formulaire.

  4. Dans le Concepteur visuel du formulaire, sélectionnez le bouton. Dans le volet Propriétés , sélectionnez le bouton Filtre d’événements , puis double-cliquez sur l’événement Click pour générer un gestionnaire d’événements.

  5. Le Click code d’événement doit être visible. En dehors de l’étendue du gestionnaire d’événements, ajoutez deux variables de chaîne privée à la classe nommée documentContents et stringToPrint:

    // 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. De retour dans le code du Click gestionnaire d’événements, définissez la DocumentName propriété sur le document que vous souhaitez imprimer, puis ouvrez et lisez le contenu du document sur la chaîne que vous avez ajoutée précédemment.

    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. Comme vous le feriez pour imprimer le document, dans le gestionnaire d'événements PrintPage , utilisez la propriété Graphics de la classe PrintPageEventArgs et le contenu du fichier pour calculer les lignes par page et restituer le contenu du document. Une fois chaque page dessinée, case activée pour voir s’il s’agit de la dernière page et définir la HasMorePages propriété de la PrintPageEventArgs page en conséquence. L'événement PrintPage est déclenché jusqu'à ce que HasMorePages soit false. Une fois le rendu du document terminé, réinitialisez la chaîne à restituer. Vérifiez également que l’événement PrintPage est associé à sa méthode de gestion des événements.

    Remarque

    Si vous avez implémenté l’impression dans votre application, vous avez peut-être déjà terminé l’étape 5 et 6.

    Dans l'exemple de code suivant, le gestionnaire d'événements est utilisé pour imprimer le fichier « testPage.txt » avec la même police que celle utilisée sur le formulaire.

    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. Affectez comme valeur de la propriété Document du contrôle PrintPreviewDialog le composant PrintDocument sur le formulaire.

    printPreviewDialog1.Document = printDocument1;
    
    PrintPreviewDialog1.Document = PrintDocument1
    
  9. Appelez la méthode ShowDialog sur le contrôle PrintPreviewDialog . Notez le code mis en surbrillance ci-dessous, vous devez généralement appeler ShowDialog à partir de la Click méthode de gestion des événements d’un bouton. L'appel de ShowDialog déclenche l'événement PrintPage et affiche la sortie du contrôle PrintPreviewDialog . Lorsque l’utilisateur sélectionne l’icône d’impression dans la boîte de dialogue, l’événement PrintPage est à nouveau déclenché, en envoyant la sortie à l’imprimante au lieu de la boîte de dialogue d’aperçu. Par conséquent, la chaîne est réinitialisée à la fin du processus de rendu à l’étape 4.

    L'exemple de code suivant montre la méthode de gestion d'événements Click pour un bouton sur le formulaire. La méthode de gestion des événements appelle les méthodes pour lire le document et afficher la boîte de dialogue Aperçu avant impression.

    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
    

Voir aussi