4

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

这里我显示对话框:

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

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

替代文字

我手动将值更改为 5。

然后我保存更改:

MySettings.Default.pageSettings = psd.PageSettings;

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

替代文字

更新:

因此,只是为了尝试扩展问题 - 如果我们第一次显示 PageSetupDialog,默认设置值为所有边距为 10。如果我们在调试期间检查这些值,那么我们会看到它们是这样表示的:

替代文字

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

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

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

所以我们希望在检查 pageSettingDialog 对象时看到一些边距值全部为 5(或 50,这似乎是 10 与 100 混淆的情况,见上文)。那么让我们看一下对象:

替代文字

低,看这不是我们所期望的,出于某种奇怪的原因,它是 20。这就是我被卡住的地方,我只是无法弄清楚这里看到的背后发生了什么。为什么它从 50 变为 20?,为什么它不会保持我设置的值?希望能更好地解释它。

4

2 回答 2

5

边距值以百分之一英寸为单位,默认值为 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);
}

您的 PageSetupDialog 也有一个 EnableMetric 属性,它也应该可以解决您的问题。我还没有测试过这个。见这里

PageSetupDialog psd = new PageSetupDialog();
psd.EnableMetric = true;
于 2010-12-20T13:51:00.537 回答
0

由于我们没有更多的代码可以查看,我将给出我的“最佳猜测”。

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

或者,在保存表单时,有一些东西会覆盖该值。

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

于 2010-12-14T17:59:06.557 回答