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

如何完成打印作业

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

以下过程要求你已创建一个基于 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.");