在对话框显示给用户之后,我试图修改从System.Windows.Forms.PrintDialog获取的System.Drawing.Printing.PrinterSettings对象。虽然我可以更改PrinterSettings对象的属性值,但在打印文档时,实际上不会考虑在显示对话框之后所做的任何更改。
下面是一个我所说的例子:
//Show the printdialog and retreive the printersettings
var printDialog = new PrintDialog();
if (printDialog.ShowDialog() != DialogResult.OK)
return;
var printerSettings = printDialog.PrinterSettings;
//Now modify the printersettings object
printerSettings.ToPage = 8;
现在使用printerSettings对象进行打印。我使用第三方dll Assose.Words进行打印,因为我需要打印Word,但这似乎不是问题。似乎在显示对话框后,所有设置都已提交到打印机,更改PrinterSettings没有任何效果。有什么想法如何让它工作吗?
编辑:我有一些解决方法。我想在这里得到这些具体问题的答案:在对话框显示后是否可以更改PrinterSettings对象,以及在打印时是否考虑这些更改。如果有人只知道一种工作方式(您可以决定使用什么API进行打印,只要使用PrinterSettings对象就无所谓),我将非常感谢。
2条答案
按热度按时间rryofs0p1#
我注意到了PrintDialog的几件事(这可能回答了你的问题,也可能没有回答)。
首先,它只是windows com对话框的一个 Package 类。
第二,也是最重要一点,关于你的问题,我想是:PrintDialog类具有此例程,该例程在PrintDlg调用关闭后调用
这里还有一个相当有趣的相互作用(记住您设置了PrinterSettings.ToPage):
然后再
我知道这不是一个直接的答案,但我认为应该会给你指出它为什么不工作的正确方向。在我看来,在对话框的使用过程中,它可以很高兴地取消设置的变化,因为它将在完成时重新创建,但当对话框完成时,更改设置实际上无效的文档打印设置,直到它被再次设置。它可能是可以手动做到这一点,或者它可能被M$以通常的内部/私有方式洛赫。
当然,还有一个选项(不像我所知道的那样好),就是在调用后直接使用Win API-如果需要的话,代码可以根据上面的对话框来构建自己的 Package 器。
wbgh16ku2#
来自Assose文档:
看来你可以将你修改过的PrinterSettings对象传递给你要打印的word文档。你能告诉我这是否有效吗?