How to add print dialog to printpreviewdialog?

My boss wants me to create a window shape with a print function, but he wants to print datagridviewafter previewing.

So, now I recommend the problem, I can’t print several sheets of paper or select a printer or make any changes when they press the print button on printpreviewdialog. When I press the button, it directs the printing of paper. So I want to join printpreviewdialogand printdialog.

Why printpreviewdialogand printdialogcan only be used on different buttons? Lack of convenience if necessary, to click one button for a preview and press another button to print multiple sets and make changes to the printer.

Can anybody help me?

Printdialog

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();
            }   

PrintPreviewDialog

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();
+4
3

, , , - . , " ". print-button printpreviewdialog, - . . , printpreview, ToolStrip PrintPreviewDialog.

(, 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();

, ToolStrip PrintPreview "". 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());
    }
}
+4

... ... :

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;
+3

The snippet provided by @AceIndy above does not take into account whether the user has changed the default printer or its settings. Here is how I solved this problem:

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());
    }
}
0
source

Source: https://habr.com/ru/post/1658792/


All Articles