如何从打印预览中显示打印设置?

时间:2016-10-26 12:35:02

标签: c# printing

在我的C#项目中,我有2个打印功能。一个可以直接打印文档,另一个可以向用户显示预览,并在用户选择时进行打印。

虽然两种方法都有效,但direkt打印版本在打印文档之前会显示打印设置窗口。

private void printButton_Click(object sender, EventArgs e)    
{
    PrintDialog printDialog = new PrintDialog();
    printDialog.Document = printIssues;
    printDialog.UseEXDialog = true;

    if (DialogResult.OK == printDialog.ShowDialog())
    {
        printIssues.DocumentName = "Some Name";
        printIssues.DefaultPageSettings.Landscape = true;
        printIssues.Print();
    }
}

private void previewButton_Click(object sender, EventArgs e)
{
    PrintPreviewDialog printPreview = new PrintPreviewDialog();
    printPreview.Icon = Properties.Resources.favicon;
    printPreview.Document = printIssues;
    printIssues.DefaultPageSettings.Landscape = true;
    ((Form)printPreview).WindowState = FormWindowState.Maximized;

    printPreview.ShowDialog();
}

我首先展示预览的第二个版本,一旦我点击打印按钮,文档就会在默认打印机上打印而不显示“设置”窗口。我已经尝试了一些事情并且在一段时间内搜索得很安静但是找不到任何帮助我的东西。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

我认为我找到了解决问题的方法。一般情况下,打印按钮直接将文档发送到打印机,但您可以按照此问题WorkAround may be?

的回答来托管控件。

希望这有帮助。

祝你好运

答案 1 :(得分:0)

我担心这是PrintPreviewDialog的已知限制。 它需要知道打印机绘制布局,因此它使用默认打印机。

我过去遇到了同样的问题,我相信可以通过在显示PrintPreviewDialog之前显示PrintDialog来解决。

 
private void previewButton_Click(object sender, EventArgs e)
{
    PrintDialog printDialog = new PrintDialog();
    if (DialogResult.OK == printDialog.ShowDialog())
        {
             PrintPreviewDialog printPreview = new PrintPreviewDialog();
             printPreview.Document = printIssues;

             // this is were you take the printersettings from the printDialog
             printPreview.Document.PrinterSettings = printDialog.PrinterSettings;

             printIssues.DefaultPageSettings.Landscape = true;
             printPreview.ShowDialog();         
        }  
}

另一种解决方法是制作自己的PrintPreviewDialog。但它需要更多编码。

你能告诉我上述代码是否适合你吗?