2010-11-26 188 views
3

看来你可以坚持在一个设置文件PrinterSettings和PageSettings,他们是Serializable等等太棒了!一切都很顺利,直到我试图坚持我的PageSettings和利润率。每次我改变边距,保存设置,然后将它们重新加载到PageSetupDialog.PageSettings中 - 它们已被修改。有谁知道为什么发生这种情况?是驱动程序还是Windows正在做的事情?它的怪异,见下图:PageSettings不断得到修改

我在这里显示对话框:

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

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

alt text

我手动更改值5

然后我保存的更改:

MySettings.Default.pageSettings = psd.PageSettings; 

当我重新加载对话框并加载设置中的设置fi乐的价值已经变为2!?

alt text

UPDATE:

所以只是尝试和扩大这个问题 - 如果我们显示的PageSetupDialog首次使用默认设置值,它们是10的所有利润。如果我们在调试期间检查值,那么我们看到他们这样表示:

alt text

所以他们都是100,奇怪,但我希望他们是10个,即像10毫米一样的对话框说,所以我不不管怎样,我们都不知道100所涉及的单位是什么,但是我们假设它在对话框中与10相关。

我们然后在对话框,然后按确定他们都编辑到5 - 所以我们闯过此代码:

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

,所以我们希望看到的pageSettingDialog对象的检查,看到了一些值利润率全部为5(或50,就像在10 vs 100混乱中似乎是这种情况,见上文)。让我们来看看对象,然后:

alt text

低,不料这不是我们的预期,这是20理由很奇怪。这就是我陷入困境的地方,我无法弄清楚这里的情况。为什么它会从50变为20?为什么它不能保持我设定的价值? 希望能够更好地解释它。

+0

只有当您从Visual Studio运行(调试)或者甚至从Windows资源管理器运行exe时才会发生这种情况吗? – decyclone 2010-12-14 17:28:02

+0

它发生在调试和exe中。 – Vidar 2010-12-15 11:21:58

+0

查看我对原始发布的更改。 – Vidar 2010-12-15 14:25:05

回答

4

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

因为我们没有更多的代码可以看,所以我会给它一个“最好的猜测”。

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

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

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