代码之家  ›  专栏  ›  技术社区  ›  Nayan

PageSetupDialog未正确返回PageSize

  •  1
  • Nayan  · 技术社区  · 16 年前

    我正在尝试使用PageSetupDialog设置文档的打印页。

    在打开对话框之前,文档设置正确,页面大小和页面源设置也正确。 是的,我正在按“确定”按钮。

    这个问题并不新鲜,但到目前为止还没有正确的答案。

        PageSetupDialog dlgPageSetup = new PageSetupDialog();
        dlgPageSetup.Document = this.printDocument1; //this is fine, assume that.
        dlgPageSetup.PageSettings.PaperSize = new PaperSize("My Custom", 1012, 800);
        dlgPageSetup.PageSettings.PaperSource.SourceName = "Envelope";
        if (dlgPageSetup.ShowDialog(this) == DialogResult.OK) {
            System.Diagnostics.Trace.WriteLine("DEBUG: "
                  + dlgPageSetup.PageSettings.PaperSize);
            System.Diagnostics.Trace.WriteLine("DEBUG: "
                  + dlgPageSetup.PageSettings.PaperSource);
        }
    

    我使用的是.NET2.0,而不是2k5。

    Link to original issue.

    我猜这仍然是一个错误,它与自定义页面大小有关。有人能解决这个问题吗?

    2 回复  |  直到 16 年前
        1
  •  1
  •   Matthew Lowe    16 年前

    我通过以下方法解决了这个问题:

    1. 将“页面设置”对话框上的“文档”属性设置为(无)
    2. 如果我看到打印文档设置为自定义PageKind,则重新创建它

    所以在打开printsettings对话框之前,我先检查打印文档的PageKind,如果需要的话重新创建,然后打开对话框。

    if(printDocument1->DefaultPageSettings->PaperSize->Kind == 
        System::Drawing::Printing::PaperKind::Custom)
    {
      RecreatePrintDocument();
    }
    pageSetupDialog1->PageSettings = printDocument1->DefaultPageSettings;
    pageSetupDialog1->PrinterSettings = printDocument1->PrinterSettings;
    Windows::Forms::DialogResult dresult = pageSetupDialog1->ShowDialog();
    

    在RecreatePrintDocument()中,我创建一个新的printdocument并分配处理程序,诸如此类。

    这不是一个很好的解决方案,因为如果用户选择了自定义的页面类型,我们会忘记页面设置,但这是一个开始。

        2
  •  1
  •   Nayan    15 年前

    这是一个已知的错误。直到.NET3.5,它仍然是可复制的。有关线程的更多详细信息 http://social.msdn.microsoft.com/forums/en-US/winforms/thread/81bb2cea-8d47-4ddc-a174-14d6bc196de7/