Vid*_*dar 4 .net settings printers
看来你可以坚持设置文件PrinterSettings和PageSettings,它们是Serializable等.太棒了!在我试图保持我的PageSettings和边距之前,一切都很顺利.每次我更改边距时,保存设置,然后将它们重新加载回PageSetupDialog.PageSettings - 它们已被修改.有谁知道为什么会这样?它是驱动程序或Windows正在做的事情吗?奇怪,见下文:
在这里我显示对话框:
PageSetupDialog psd = new PageSetupDialog();
psd.PageSettings = MySettings.Default.pageSettings;
if (psd.ShowDialog() == DialogResult.OK)
Run Code Online (Sandbox Code Playgroud)

我手动将值更改为5.
然后我保存更改:
MySettings.Default.pageSettings = psd.PageSettings;
Run Code Online (Sandbox Code Playgroud)
当我重新加载对话框并从设置文件加载设置时,值已更改为2!?

更新:
所以只是尝试扩展问题 - 如果我们第一次显示PageSetupDialog,默认设置值为10,所有边距.如果我们在调试期间检查值,那么我们看到它们表示如下:

所以它们都是100,很奇怪,但我希望它们是10,就像对话框所说的10mm一样,所以我不知道100的测量单位是什么,但无论如何我们假设它与对话框中的10相关.
然后我们在对话框中将它们全部编辑为5并按OK - 所以我们通过这段代码:
if (psd.ShowDialog() == DialogResult.OK)
Run Code Online (Sandbox Code Playgroud)
所以我们期望在检查pageSettingDialog对象时看到边距的一些值全部为5(或者50,在10对100混淆中似乎就是这种情况,见上文).我们来看看对象:

很低,看到它不是我们所期待的,出于某种奇怪的原因它是20.这就是我被卡住的地方,我无法解决这里所见的最新情况.为什么它会从50变为20 ?,为什么不保持我设定的值?希望能更好地解释它.
边距值以百分之一英寸为单位,默认值为100(= 1英寸).5毫米等于0.196845455英寸,其舍入为0.20.0.20乘以100等于20.请参阅MSDN上的这篇文章.
这解释了您在调试会话期间看到的内容.至于你的对话,我认为有一些文化问题正在发生.如果我有一些时间,我会更多地研究这个问题,但是现在我希望这会对你有所帮助.
编辑
好吧,我认为发生的事情是对话框在离开对话框时转换指标但在打开时不执行.我认为您可以通过在打开对话框时转换值来创建变通方法.像这样的东西:
PageSetupDialog psd = new PageSetupDialog();
Margins currentMargins = MySettings.Default.pageSettings.Margins;
psd.PageSettings.Margins = new Margins(
ConvInchToMm(currentMargins.Left), ConvInchToMm(currentMargins.Right),
ConvInchToMm(currentMargins.Top), ConvInchToMm(currentMargins.Bottom));
private int ConvInchToMm(int hundrInch)
{
return (int)(hundrInch * 2.54);
}
Run Code Online (Sandbox Code Playgroud)
您的PageSetupDialog还具有EnableMetric属性,该属性也可以解决您的问题.我没有测试过这个.看到这里.
PageSetupDialog psd = new PageSetupDialog();
psd.EnableMetric = true;
Run Code Online (Sandbox Code Playgroud)