PageSettings.PrinterResolution及X属性有Setter却无法赋值的技术问题
解决PrinterResolution.X属性设置不生效的问题
我之前也踩过这个坑——虽然MSDN文档标注了PrinterResolution.X具备Setter,但直接修改它的值确实不会生效,问题出在你修改的是一个副本对象,而非绑定到打印文档的实际设置。
问题根源
当你访问pd.DefaultPageSettings.PrinterResolution时,.NET框架会返回当前打印机分辨率设置的克隆副本,而不是直接引用内部存储的对象。所以你修改这个副本的X或Y属性后,原打印文档的设置根本没被改动,自然还是保留原来的值。
正确的解决方法
你需要创建一个新的PrinterResolution实例,配置好想要的参数,然后将这个新对象整体赋值给DefaultPageSettings.PrinterResolution。如果是自定义分辨率,记得把Kind属性设为PrinterResolutionKind.Custom,同时确保你的打印机支持自定义分辨率。
示例代码如下:
PrintDocument pd = new PrintDocument(); // 先完成打印机分配等初始化操作 // 错误写法:直接修改副本的属性,不会生效 // pd.DefaultPageSettings.PrinterResolution.X = 300; // 正确写法:创建新的PrinterResolution对象并赋值 PrinterResolution customRes = new PrinterResolution(); customRes.Kind = PrinterResolutionKind.Custom; customRes.X = 300; // 设置目标横向分辨率 customRes.Y = 300; // 设置目标纵向分辨率 // 替换原有的PrinterResolution设置 pd.DefaultPageSettings.PrinterResolution = customRes; // 验证设置是否生效 Console.WriteLine($"修改后的X分辨率:{pd.DefaultPageSettings.PrinterResolution.X}");
额外注意事项
- 如果你的打印机不支持自定义分辨率,设置
Kind = Custom可能会被忽略,系统会自动回退到打印机支持的默认分辨率。你可以通过pd.PrinterSettings.PrinterResolutions获取打印机支持的所有分辨率列表,从中选择合适的项来赋值。 - 确保在修改设置前,已经正确指定了目标打印机,否则默认打印机的设置可能会覆盖你的修改。
内容的提问来源于stack exchange,提问作者L. Guthardt
相关产品推荐
相关产品推荐

