PrintDialog 组件概述(Windows 窗体 .NET)

Windows 窗体中的打印主要包括使用 PrintDocument 组件使用户能够打印。 PrintPreviewDialog 控件、PrintDialogPageSetupDialog 组件为 Windows 操作系统用户提供了熟悉的图形界面。

PrintDialog 组件是一个预先配置的对话框,可用于在基于 Windows 的应用程序中选择打印机、选择要打印的页以及确定其他与打印相关的设置。 这是一个打印机和打印相关设置的简单解决方案,而不用配置你自己的对话框。 你可让用户打印文档的很多部分:全部打印、打印所选页范围或打印选定内容。 利用标准的 Windows 对话框,你可以创建其基本功能可立即为用户所熟悉的应用程序。 PrintDialog 组件继承自 CommonDialog 类。

通常,创建一个 PrintDocument 组件的新实例,并使用 PrinterSettingsPageSettings 类设置描述要打印的内容的属性。 调用 Print 方法来实际打印文档。

使用组件

使用 PrintDialog.ShowDialog 方法可在运行时显示对话框。 此组件具有与单个打印作业(PrintDocument 类)或单个打印机的设置(PrinterSettings 类)相关的属性。 反过来,两者之一都可以由多个打印机共享。

显示对话框方法可帮助你向窗体添加打印对话框。 PrintDialog 组件将在 Visual Studio 中的 Windows 窗体设计器底部的任务栏中显示。

如何在运行时从 PrintDialog 中捕获用户输入

可以在设计时设置与打印相关的选项。 有时需要在运行时更改这些选项,这很可能是因为用户做出的选择。 可以使用 PrintDialogPrintDocument 组件捕获用户输入以打印文档。 以下步骤演示如何显示文档的打印对话框:

  1. PrintDialogPrintDocument 组件添加到窗体。

  2. PrintDialogDocument 属性设置为添加到窗体中的 PrintDocument

    PrintDialog1.Document = PrintDocument1
    
    printDialog1.Document = printDocument1;
    
  3. 使用 ShowDialog 方法显示 PrintDialog 组件。

    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. 用户在对话框中的打印选项将复制到 PrintDocument 组件的 PrinterSettings 属性。

如何创建打印作业

在 Windows 窗体中打印的基础是 PrintDocument 组件,更具体地说是 PrintPage 事件。 通过编写代码来处理 PrintPage 事件,可指定要打印的内容和打印方式。 以下步骤演示如何创建打印作业:

  1. PrintDocument 组件添加到窗体。

  2. 编写代码以处理 PrintPage 事件。

    必须编写自己的打印逻辑。 此外,还必须指定要打印的材料。

    作为要打印的材料,在以下代码示例中,在 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));
    

可能还需要为 BeginPrintEndPrint 事件编写代码。 它将有助于包括一个整数,该整数表示要打印的总页数,每打印一页就会递减。

注意

可以将 PrintDialog 组件添加到窗体中,以便为用户提供简洁高效的用户界面 (UI)。 通过设置 PrintDialog 组件的 Document 属性,可以设置与在窗体上使用的打印文档相关的属性。

有关 Windows 窗体打印作业细节(包括如何以编程方式创建打印作业)的详细信息,请参阅 PrintPageEventArgs

如何完成打印作业

通常,涉及打印的文字处理器和其他应用程序将提供一个选项来向用户显示打印作业已完成的消息。 可以通过处理 PrintDocument 组件的 EndPrint 事件,在 Windows 窗体中提供此功能。

以下过程要求你已创建一个基于 Windows 的应用程序,其中包含一个 PrintDocument 组件。 下面给出的过程是从基于 Windows 的应用程序启用打印的标准方法。 若要详细了解如何使用 PrintDocument 组件从 Windows 窗体 打印,请参阅如何创建打印作业

  1. 设置 PrintDocument 组件的 DocumentName 属性。

    PrintDocument1.DocumentName = "SamplePrintApp"
    
    printDocument1.DocumentName = "SamplePrintApp";
    
  2. 编写代码以处理 EndPrint 事件。

    在下面的代码示例中,将显示一个消息框,指示文档已完成打印。

    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.");