printdialog.showdialog();在64位Windows 7中无法显示打印对话框

11
我有一个带打印工具栏项的自定义控件,但在安装了64位Windows 7操作系统的计算机上,打印对话框没有弹出,而在其他操作系统中正常工作。问题只出现在64位的Windows 7系统中。我检查并分析后发现,PrintDialog.ShowDialog()会立即返回取消,而不是显示对话框,这就是问题所在。我通过以下链接找到了解决方案:http://social.msdn.microsoft.com/Forums/en/netfx64bit/thread/8760fb6c-ae63-444e-9606-cd3295ce6b5d, http://msdn.microsoft.com/en-us/library/system.windows.forms.printdialog.useexdialog.aspx。通过将PrintDialog的UseExDialog属性设置为true,对话框可以正常弹出,但此对话框样式类似于Windows XP而不是Windows 7风格,因此这并不是完美的解决方案。请提供针对64位Windows 7操作系统的完整解决方案。谢谢!

你找到解决办法了吗?现在能否不使用“UseEXDialog”属性来完成这个任务? - Dave81
5个回答

20

根据Microsoft的论坛

通过Mike Dos Zhang(MSFT CSG)

PrintDialog类在AMD64(x64或任何CPU属于AMD64技术,包括intel x64cpu)微处理器上可能无法工作,除非您将UseEXDialog属性设置为true。

这是一个已知问题。

并且这个限制已经在.net framework4中得到支持,因此如果您想使用这个类与Windows7样式对话框,则需要使用.net framework4,否则您需要使用xp样式对话框,并将UseEXDialog属性设置为true,或使用x86目标平台。

在我的情况下,第二个已知问题就是这个...我们从.NET 2.0升级到.NET 4.0,它又开始正常工作了,而不需要进行任何代码更改(对于打印)。


4
如果您不能或不喜欢设置UseEXDialog = true,另一种选择是将您的Plattform设置为x86
这样做的缺点很明显,但这样做应该会给您带来不需要升级.NET Framework的优势,就像uzbones所做的那样,这也可能会引起问题。

0

我在使用 .net framework v3.5 时遇到了同样的问题,将解决方案升级到 .net framework v4.5 后问题得到了解决。


-1

只需按照以下步骤:

1- 在Visual Studio 2008中打开您使用Visual Studio 2005创建的旧解决方案, 2- 打开解决方案时接受转换(从2005到2008), 3- 勾选备份复选框并选择所需的备份位置, 4- 成功打开解决方案后,重新生成您的解决方案, 5- 完成了。现在运行您的项目,您将看到没有任何问题显示...


-2
将对话框对象属性AutoUpgradeEnabled设置为false,可以解决在Windows 7 SP1 64位上执行时出现的问题(解决方案使用VS2008和.net 2.0编译)。
例如。
SaveFileDialog dlg = new SaveFileDialog();    
dlg.AutoUpgradeEnabled = false;

3
顺便提一下,在PrintDialog中没有“AutoUpgradeEnabled”属性。 - WiiMaxx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接