【问题标题】:PageSettings keep getting modifed unexpectedlyPageSettings 不断被意外修改
【发布时间】:2011-05-16 05:45:37
【问题描述】:

您似乎可以保留设置文件 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,即像对话框所说的 10 毫米,所以我不知道 100 是什么测量单位,但无论如何让我们假设它与 10 英寸相关对话框。

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

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

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

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

【问题讨论】:

  • 只有当您从 Visual Studio 运行(调试)时,甚至当您从 Windows 资源管理器运行 exe 时才会出现这种情况吗?
  • 在调试和 exe 中都会发生。
  • 查看我对原始帖子的更改。

标签: .net settings printers


【解决方案1】:

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

【讨论】:

  • 这只是一个启用指标的简单案例。甚至从未注意到该设置或其含义。感谢您指出这一点,即使现在看起来很明显!
【解决方案2】:

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

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

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

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

【讨论】:

  • 查看我对原始帖子的更改。
猜你喜欢
  • 2015-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-21
  • 2016-08-10
相关资源
最近更新 更多