PageSettings意外地进行了修改

时间:2010-11-26 15:01:14

标签: .net settings printers

似乎您可以在设置文件中保留PrinterSettings和PageSettings,它们是可序列化的等等。太棒了!在我试图保持我的PageSettings和边距之前,一切都很顺利。每次我更改边距时,保存设置,然后将它们重新加载回PageSetupDialog.PageSettings - 它们已被修改。有谁知道为什么会这样?它是驱动程序或Windows正在做的事情吗?它奇怪,见下文:

这里我显示了对话框:

PageSetupDialog psd = new PageSetupDialog();
psd.PageSettings = MySettings.Default.pageSettings;

    if (psd.ShowDialog() == DialogResult.OK)

alt text

我手动将值更改为5。

然后我保存更改:

MySettings.Default.pageSettings = psd.PageSettings;

当我重新加载对话框并从设置文件中加载设置时,值已更改为2!

alt text

更新

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

alt text

所以他们都是100,很奇怪,但我希望它们是10,就像对话框所说的10mm一样,所以我不知道100的测量单位是什么,但无论如何我们假设它与10相关对话框。

然后我们在对话框中将它们全部编辑为5并按OK - 所以我们通过了这段代码:

if (psd.ShowDialog() == DialogResult.OK)

所以我们期望在检查pageSettingDialog对象时看到边缘的一些值全部为5(或50,如10和100混淆中的情况似乎,见上文)。让我们看看对象:

alt text

低,看到它不是我们所期待的,出于某种奇怪的原因它是20。这就是我被卡住的地方,我无法解决这里所见的最新情况。为什么它会从50变为20 ?,为什么不保持我设定的值? 希望能更好地解释它。

2 个答案:

答案 0 :(得分:5)

边距值以百分之一英寸为单位,默认值为100(= 1英寸)。 5毫米等于0.196845455英寸,其舍入为0.20。 0.20乘以100等于20.见this article on 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);
}

您的PageSetupDialog还有一个EnableMetric属性,它也可以解决您的问题。我没有测试过这个。请参阅here

PageSetupDialog psd = new PageSetupDialog();
psd.EnableMetric = true;

答案 1 :(得分:0)

由于我们没有更多的代码可供查看,我将把它作为“最佳猜测”。

我的想法是,当对话框打开时,您的代码将值设置为2。设置保存为5,但由于硬编码设置,对话框显示2。确保没有任何内容覆盖对话框显示中的设置读数。

或者,在保存表单时,会覆盖该值。

查看您的设置读取代码和您的设置编写代码,以查看代码中是否有“2”硬编码。