2010-11-26 35 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」。