如何将“页面设置”和“打印机设置”显示为无模式窗体?

时间:2012-11-12 07:42:16

标签: c# winforms modeless

可以将“页面设置”和“打印机设置”显示为无模式吗?我使用如下代码,但表单显示为模态形式:

    // page setup
    private void btnPageSetup_Click(object sender, EventArgs e)
    {
        this.pageSetupDialog1.PageSettings = new PageSettings();
        this.pageSetupDialog1.PrinterSettings = this.printDocument1.PrinterSettings;
        this.pageSetupDialog1.ShowDialog();
        if (this.pageSetupDialog1.PageSettings != null)
        {
            this.printDocument1.DefaultPageSettings = this.pageSetupDialog1.PageSettings;
        }
    }

    // print setup
    private void btnPrintSetup_Click(object sender, EventArgs e)
    {
        this.pageSetupDialog1.Document = this.printDocument1;
        if (this.pageSetupDialog1.ShowDialog() == DialogResult.OK)
        {
            this.printDocument1.Print();
        }
    }

2 个答案:

答案 0 :(得分:0)

您可以通过调用Show而不是ShowDialog来将表单显示为非模态。

但是,您还需要对代码进行随机播放,因为您的主窗体将不再等待其中一个子窗体关闭,以便检查用户的操作。

例如,您必须更改“打印设置”代码,以便在用户点击PageSetupDialogOK打印文档本身,而不是依赖于用户点击OK时的主要表单。

同样,您需要更改页面设置代码,以便PageSetupDialog设置Document.DefaultPageSettings 本身,而不是{{1}中的“返回”设置}属性并依赖于处理它们的主表单。

答案 1 :(得分:0)

使用系统命名空间System.Drawing.Printing,您可以初始化pageSetup的新对象,并将其显示为对话框,如下例所示:

private void pageSetupToolStripMenuItem_Click(object sender, EventArgs e)
        {
            PageSetupDialog pgSetup = new PageSetupDialog();
            pgSetup.PageSettings = new System.Drawing.Printing.PageSettings();
            pgSetup.PrinterSettings = new System.Drawing.Printing.PrinterSettings();
            pgSetup.ShowNetwork = false;

            pgSetup.ShowDialog();
        }

上面的msdn示例基本上说明了如何使用PageSetup,有关更详细的示例,请参阅此extended example

对于PrinterSettings使用与PageSetup相同的命名空间,请参阅msdn和此extended example中的此示例。