Compartilhar via


Visão geral do componente PrintDialog (Windows Forms .NET)

A impressão no Windows Forms consiste principalmente em usar o componente PrintDocument para permitir que o usuário imprima. Os componentes PrintPreviewDialog controle, PrintDialog e PageSetupDialog fornecem uma interface gráfica familiar para usuários do sistema operacional Windows.

O componente PrintDialog é uma caixa de diálogo pré-configurada usada para selecionar uma impressora, escolher as páginas a serem impressas e determinar outras configurações relacionadas à impressão em aplicativos baseados no Windows. É uma solução simples para configurações relacionadas à impressora e à impressão em vez de configurar sua própria caixa de diálogo. Você pode permitir que os usuários imprimam muitas partes de seus documentos: imprimir todos, imprimir um intervalo de páginas selecionado ou imprimir uma seleção. Ao contar com caixas de diálogo padrão do Windows, você cria aplicativos cuja funcionalidade básica é imediatamente familiar para os usuários. O componente PrintDialog herda da classe CommonDialog.

Normalmente, você cria uma nova instância do componente PrintDocument e define as propriedades que descrevem o que imprimir usando as classes PrinterSettings e PageSettings. A chamada para o método Print de fato imprime o documento.

Trabalhando com o componente

Use o método PrintDialog.ShowDialog para exibir a caixa de diálogo em tempo de execução. Esse componente tem propriedades relacionadas a um único trabalho de impressão (classePrintDocument) ou às configurações de uma impressora individual (classePrinterSettings). Um dos dois, por sua vez, pode ser compartilhado por várias impressoras.

O método da caixa de diálogo "Show" ajuda você a adicionar a caixa de diálogo de impressão ao formulário. O componente PrintDialog aparece na bandeja na parte inferior do Designer de Formulários do Windows no Visual Studio.

Como capturar a entrada do usuário de um PrintDialog em tempo de execução

Você pode definir opções relacionadas à impressão em tempo de projeto. Às vezes, talvez você queira alterar essas opções em tempo de execução, provavelmente devido às escolhas feitas pelo usuário. Você pode capturar a entrada do usuário para imprimir um documento usando o PrintDialog e os componentes PrintDocument. As etapas a seguir demonstram a exibição da caixa de diálogo de impressão de um documento:

  1. Adicione um PrintDialog e um componente PrintDocument ao formulário.

  2. Defina a propriedade Document do PrintDialog para o PrintDocument adicionado ao formulário.

    PrintDialog1.Document = PrintDocument1
    
    printDialog1.Document = printDocument1;
    
  3. Exiba o componente PrintDialog usando o método ShowDialog.

    If PrintDialog1.ShowDialog() = DialogResult.OK Then
        PrintDocument1.Print()
    End If
    
    // display show dialog and if user selects "Ok" document is printed
    if (printDialog1.ShowDialog() == DialogResult.OK)
        printDocument1.Print();
    
  4. As opções de impressão do usuário da caixa de diálogo serão copiadas para a propriedade PrinterSettings do componente PrintDocument.

Como criar trabalhos de impressão

A base da impressão no Windows Forms é o componente PrintDocument, mais especificamente, o evento PrintPage. Ao escrever código para lidar com o evento PrintPage, você pode especificar o que imprimir e como imprimi-lo. As etapas a seguir demonstram a criação do trabalho de impressão:

  1. Adicione um componente PrintDocument ao formulário.

  2. Escreva o código para lidar com o evento PrintPage.

    Você terá que codificar sua própria lógica de impressão. Além disso, você precisará especificar o material a ser impresso.

    Como um material a ser impresso, no exemplo de código a seguir, um gráfico de exemplo na forma de um retângulo vermelho é criado no manipulador de eventos PrintPage.

    Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
        e.Graphics.FillRectangle(Brushes.Red, New Rectangle(100, 100, 100, 100))
    End Sub
    
    private void PrintDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) =>
        e.Graphics.FillRectangle(Brushes.Red, new Rectangle(100, 100, 100, 100));
    

Talvez você também queira escrever código para os eventos BeginPrint e EndPrint. Ele ajudará a incluir um número inteiro que representa o número total de páginas a serem impressas, sendo decrementado conforme cada página é impressa.

Nota

Você pode adicionar um componente PrintDialog ao formulário para fornecer uma interface do usuário (interface do usuário) limpa e eficiente aos usuários. Definir a propriedade Document do componente PrintDialog permite que você defina propriedades relacionadas ao documento de impressão com o qual você está trabalhando no formulário.

Para obter mais informações sobre as especificidades dos trabalhos de impressão do Windows Forms, incluindo como criar um trabalho de impressão programaticamente, consulte PrintPageEventArgs.

Como concluir trabalhos de impressão

Frequentemente, os processadores de palavras e outros aplicativos que envolvem impressão fornecerão a opção de exibir uma mensagem aos usuários de que um trabalho de impressão está concluído. Você pode fornecer essa funcionalidade em seus Windows Forms manipulando o evento EndPrint do componente PrintDocument.

O procedimento a seguir exige que você tenha criado um aplicativo baseado no Windows com um componente PrintDocument nele. O procedimento abaixo é a maneira padrão de habilitar a impressão de um aplicativo baseado no Windows. Para obter mais informações sobre impressão do Windows Forms usando o componente PrintDocument, consulte Como criar trabalhos de impressão.

  1. Defina a propriedade DocumentName do componente PrintDocument.

    PrintDocument1.DocumentName = "SamplePrintApp"
    
    printDocument1.DocumentName = "SamplePrintApp";
    
  2. Escreva o código para lidar com o evento EndPrint.

    No exemplo de código a seguir, uma caixa de mensagem é exibida, indicando que o documento terminou de imprimir.

    Private Sub PrintDocument1_EndPrint(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintEventArgs) Handles PrintDocument1.EndPrint
        MessageBox.Show(PrintDocument1.DocumentName + " has finished printing.")
    End Sub
    
    private void PrintDocument1_EndPrint(object sender, System.Drawing.Printing.PrintEventArgs e) =>
        MessageBox.Show(printDocument1.DocumentName + " has finished printing.");