PageSetupDialog неправильно возвращает PageSize - PullRequest
1 голос
/ 13 апреля 2010

Я пытаюсь настроить печать страницы для документа, используя 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.

Ссылка на оригинальный номер.

Я предполагаю, что это все еще ошибка, связанная с нестандартным размером страницы. У кого-нибудь есть решение этой проблемы?

Ответы [ 2 ]

1 голос
/ 03 октября 2010

Это известная ошибка.До .NET 3.5 это все еще воспроизводимо.Подробнее на тему http://social.msdn.microsoft.com/forums/en-US/winforms/thread/81bb2cea-8d47-4ddc-a174-14d6bc196de7/

1 голос
/ 11 мая 2010

Я решил эту проблему следующим образом:

  1. установив для свойства документа в диалоговом окне настройки страницы значение (нет)
  2. , заново создав документ для печати, если я вижу, что для него установлено значениеcustom PageKind

Поэтому, прежде чем открыть диалоговое окно параметров печати, я проверяю 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 (), Я создаю новый документ для печати и назначаю обработчик такого рода.

Это не очень хорошее решение, потому что мы просто забываем настройки страницы, если пользователь выбирает пользовательский тип страницы, но это что-тодля начала.

...