PageSetupDialog没有正确返回PageSize

时间:2010-04-13 13:16:43

标签: c# .net printing c#-2.0

我正在尝试使用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);
    }

我正在使用.Net 2.0,VS 2k5。

Link to original issue.

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

2 个答案:

答案 0 :(得分:1)

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

  1. 将页面设置对话框中的Document属性设置为(none)
  2. 如果我发现它已设置为自定义PageKind
  3. ,则重新创建该文档

    因此,在打开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并分配了处理程序,这类事情。

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

答案 1 :(得分:1)

这是一个已知的错误。直到.NET 3.5,它仍然是可重现的。有关线程http://social.msdn.microsoft.com/forums/en-US/winforms/thread/81bb2cea-8d47-4ddc-a174-14d6bc196de7/

的更多详细信息