2010-11-26 3 views
3

設定ファイルPrinterSettingsやPageSettingsなどで永続化できると思われます。 PageSettingsとマージンを維持しようとするまで、すべてがうまくいっていました。マージンを変更するたびに、設定を保存してからPageSetupDialog.PageSettingsにリロードして、変更されました。誰がなぜこれが起こるのか知っていますか?それはドライバかWindowsがやっていることですか?その奇妙な、以下を参照:PageSettings予期せぬ変更を続ける

MySettings.Default.pageSettings = psd.PageSettings; 
:その後、私は、変更を保存

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

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

alt text

は私が手動で

5に値を変更します。ここでは

私はダイアログを表示

ダイアログを読み込んで設定fiから設定を読み込むと値は2に変更されました!

alt text

UPDATE:

だから試してみて、問題に拡大する - 私たちはすべてのマージンのために10あるデフォルト設定値を使用して、初めてPageSetupDialogを示している場合。だから彼らは、すべての奇妙100ですが、私は彼らが10すなわちようなダイアログのような10ミリメートルが言うので、私は「ドンであることが予想

alt text

:私たちは、デバッグ時の値を調べるならば、我々は彼らがこのように表さ見ますどの測定単位100がどのようなものであるかを知っているが、とにかくそれがダイアログ内で10と相関すると仮定することができる。

我々は、ダイアログ、[OK]をクリックして5にそれらすべてを編集 - 私たちは、このコードを乗り越える:

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

ので、我々はのためにいくつかの値を参照してくださいpageSettingDialogオブジェクトの検査で見ることを期待しますマージンはすべて5である(または10対100の混乱の場合のように見える50、上記参照)。低

alt text

と、それはそれはいくつかの奇妙な理由で20だ、私たちが期待していたものではないのです見よ:のは、そのオブジェクトを見てみましょう。それは私が立ち往生する場所です、私はちょうどここで目の後ろに起こっているものを解決することはできません。 50から20に変わるのはなぜですか?私が設定した価値を維持しないのはなぜですか? ほんの少し説明してくれることを願っています。

+0

これは、Visual Studioから(デバッグ)を実行する場合、またはWindowsエクスプローラからexeを実行する場合にのみ発生しますか? – decyclone

+0

これはdebugとexeの両方で発生します。 – Vidar

+0

元の転記への変更を参照してください。 – Vidar

答えて

4

余白の値は100分の1インチで、デフォルト値は100(= 1インチ)です。 5mmは0.196845455インチに等しく、これは0.20に丸められる。 0.20倍100 = 20となります。this article on MSDN.

これは、デバッグセッション中に表示される内容を説明しています。あなたのダイアログについては、文化的な問題があると思います。私は時間があればこのことをもっと見ていきますが、今はもう少しお手伝いされることを願っています。

[OK]をEDITは、私が起こる考えるものダイアログがダイアログを離れるときのメトリックを変換しますが開いたときに、それをしないということです。私はダイアログを開くときに値を変換することで回避策を作ることができると思います。このような何か:

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

メトリックを有効にするのは単なる単純なケースでした。その設定やそれが意味することに気付かなかった。それが今や目に見えているように見えても、それを指摘してくれてありがとう! – Vidar

0

私たちは見るべきコードがもうないので、私はそれを私の "最高の推測"とします。

私の考えは、ダイアログが開いているときにコードが2の値を設定していることです。設定は5として保存されますが、ハードコードされた設定のためダイアログには2が表示されます。ダイアログ表示の設定値を上書きするものがないことを確認してください。

また、フォームを保存するときに値を上書きするものがあります。

設定を参照してください。コードを読んで、設定にコードを書き込んで、コードに「2」がハードコードされているかどうかを確認してください。

+0

元の投稿への変更を見る。 – Vidar

関連する問題