如何将打印对话框添加到printpreviewdialog?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将打印对话框添加到printpreviewdialog?相关的知识,希望对你有一定的参考价值。

我的老板要我创建具有打印功能的窗体,但他想在预览后打印datagridview

所以现在我鼓励这个问题,当我点击printpreviewdialog上的打印按钮时,我无法打印多套纸张或选择打印机或进行任何更改。当我点击按钮时,它将直接打印纸张。所以我希望加入printpreviewdialogprintdialog

为什么printpreviewdialogprintdialog只能用于不同的按钮?当需要单击一个按钮进行预览并单击另一个按钮来打印多个设置并更改打印机时,缺乏可用性。

任何人都可以帮助我吗?

打印对话框

DialogResult result = printDialog1.ShowDialog();
            // If the result is OK then print the document.
            if (result == DialogResult.OK)
            {
                position = 0;
                pageno = 1;
                printDocument2.DefaultPageSettings.Margins = new Margins(20, 20, 20, 20);
                printDocument2.OriginAtMargins = true;
                printPreviewDialog1.Document = printDocument2;
                printPreviewDialog1.ShowDialog();
            }   

打印预览对话框

printDocument3.DefaultPageSettings.Margins = new Margins(20, 20, 20, 20);
            printDocument3.OriginAtMargins = true;
            //((ToolStripButton)((ToolStrip)printPreviewDialog1.Controls[1]).Items[0]).Enabled = false;
            printPreviewDialog1.Document = printDocument3;
            printPreviewDialog1.ShowDialog();
答案

我知道现在已经晚了,但我认为有人仍然需要这样做。正如Hans Passant所说,“打印预览在很大程度上取决于打印机和页面设置。”但是printpreviewdialog中有一个打印按钮,对于大多数情况来说仍然是合理的。但该按钮直接打印到您的默认打印机,从不显示对话框。如果需要printpreview对话框中的打印对话框,则只需操作PrintPreviewDialog的ToolStrip即可。

在这里(假设你初始化了printPreviewDialog1,printDialog1和printDocument1对象)

printPreviewDialog1.Document = printDocument1;
ToolStripButton b = new ToolStripButton();
b.Image = Properties.Resources.PrintIcon;
b.DisplayStyle = ToolStripItemDisplayStyle.Image;
b.Click += printPreview_PrintClick;
((ToolStrip)(printPreviewDialog1.Controls[1])).Items.RemoveAt(0);
((ToolStrip)(printPreviewDialog1.Controls[1])).Items.Insert(0, b);
printPreviewDialog1.ShowDialog();

使用上面的代码,您可以删除PrintPreview的ToolStrip上的默认打印按钮,并将其替换为新创建的“打印按钮”。此按钮现在具有Click事件处理程序,通过使用它,您可以显示PrintDialog。

private void printPreview_PrintClick(object sender, EventArgs e)
{
    try
    {
        printDialog1.Document = printDocument1;
        if (printDialog1.ShowDialog() == DialogResult.OK)
        {
            printDocument1.Print();
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, ToString());
    }
}
另一答案

效果很好......有一个提示......您可以通过以下方式重新使用当前图标:

this.ToolStripButton.Image = ((System.Windows.Forms.ToolStrip)(printPreviewDialog.Controls[1])).ImageList.Images[0];

片段的其余部分:

        {
        this.ToolStripButton = new System.Windows.Forms.ToolStripButton();
        this.ToolStripButton.Image = ((System.Windows.Forms.ToolStrip)(printPreviewDialog.Controls[1])).ImageList.Images[0];
        this.ToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
        this.ToolStripButton.Click += new System.EventHandler(this.printPreview_PrintClick);
        ((System.Windows.Forms.ToolStrip)(printPreviewDialog.Controls[1])).Items.RemoveAt(0);
        ((System.Windows.Forms.ToolStrip)(printPreviewDialog.Controls[1])).Items.Insert(0, ToolStripButton);
    }
    private void printPreview_PrintClick(object sender, System.EventArgs ee)
    {
        try
        {
            this.printDialog.Document = printDocument;
            if (printDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                printDocument.Print();
            }
        }
        catch (System.Exception ex)
        {
            System.Windows.MessageBox.Show(ex.Message, ToString());
        }
    }
    private System.Windows.Forms.ToolStripButton ToolStripButton;
另一答案

上面的@AceIndy提供的代码段不会考虑用户是否更改默认打印机或其设置。这就是我解决这个问题的方法:

private void printPreview_PrintClick(object sender, EventArgs e)
{
    try
    {
        printDialog.Document = printDocument;

        if (printDialog.ShowDialog() == DialogResult.OK)
        {
            printDocument.PrinterSettings = printDialog.PrinterSettings;

            printDocument.Print();
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, ToString());
    }
}

以上是关于如何将打印对话框添加到printpreviewdialog?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不显示打印对话框的情况下使用 JRPrintServiceExporter 更改边距?

如何列出网络上的所有打印机?

对话框上添加打印预览和打印

pdf文件不大但打印时非常大,打印很慢,如何解决

使用 Excel PrintOut 方法时如何防止打印对话框

如何将 CMFCPropertyGridCtrl 添加到对话框