Подтвердить что ты не робот

PrintDialog.ShowDialog(это) немедленно возвращает DialogResult.Cancel в Windows 7

Встроенное приложение, которое я разрабатываю, ведет себя странно на компьютере под управлением Windows 7 (64-разрядный).

Если я создаю экземпляр PrintDialog и вызывается метод ShowDialog(), метод немедленно возвращает DialogResult.Cancel, не показывая диалоговую форму принтера.

На компьютере Windows 7 установлены принтеры (с рабочим принтером по умолчанию).

PrintDialog printDialog = new PrintDialog();

printDialog.PrinterSettings.Copies = 2;
printDialog.AllowCurrentPage = false;
printDialog.AllowPrintToFile = false;
printDialog.AllowSelection = false;
printDialog.AllowSomePages = false;
DialogResult dialogResult = printDialog.ShowDialog(this);

if (dialogResult == DialogResult.Cancel)
    return;

Любые подсказки, почему это происходит?

4b9b3361

Ответ 1

Установите printDialog.UseEXDialog в true, чтобы обойти эту ошибку.

В .Net 3.5, MSDN упоминает эту потенциальную проблему при документировании UseEXDialog:

Если для этого свойства установлено значение true, ShowHelp и ShowNetwork будут проигнорированы, поскольку эти свойства стали устаревшими для Windows 2000 и более поздних версий Windows. Кроме того, класс PrintDialog может не работать на микропроцессорах AMD64, если вы не установите для свойства UseEXDialog значение true.

(Мой акцент.)

Те же страницы для .NET 4 и .NET 4.5 не включать выделенный бит, поэтому, возможно, он исправлен в этих версиях.