PrintDialog.ShowDialog (это) немедленно возвращает DialogResult.Cancel в Windows 7 - PullRequest
12 голосов
/ 16 ноября 2009

Собственное приложение, которое я разрабатываю, ведет себя странно на 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;

Есть какие-нибудь подсказки, почему это происходит?

1 Ответ

30 голосов
/ 16 ноября 2009

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

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

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

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

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

...