Pagesettingsは予期せず変更され続けます
質問
設定ファイルのプリンターシッティングやページセッティングで持続できるようです。シリアル化可能などです。ページセットとマージンを維持しようとするまで、すべてが順調に進んでいました。マージンを変更するたびに、設定を保存してから、PagesESTUPDIALOG.PAGESTINGSに戻します - それらは変更されました。なぜこれが起こるのか誰か知っていますか?ドライバーやWindowsがやっていることですか?その奇妙な、以下を参照してください:
ここで私はダイアログを示します:
PageSetupDialog psd = new PageSetupDialog();
psd.PageSettings = MySettings.Default.pageSettings;
if (psd.ShowDialog() == DialogResult.OK)
値を手動で5に変更します。
次に、変更を保存します。
MySettings.Default.pageSettings = psd.PageSettings;
設定ファイル]ファイルから設定にダイアログとロードをリロードすると、値が2に変更されました!?
アップデート:
したがって、問題を拡張して拡張するために - すべてのマージンで10であるデフォルト設定値を使用して、PagesSetupDialogを初めて表示する場合。デバッグ中に値を検査すると、次のように表現されています。
それらはすべて100ですが、奇妙ですが、ダイアログのように10mmのように10であると予想していたので、メジャー100の単位がどのようなものであるかはわかりませんが、とにかくダイアログの10と相関していると仮定します。
次に、ダイアログでそれらすべてを5に編集してOKを押します。そのため、このコードを通過します。
if (psd.ShowDialog() == DialogResult.OK)
したがって、ページセットディアログオブジェクトの検査で、マージンのいくつかの値が5つ(または50と50と50対100の混乱の場合のように思われる)が表示されることを確認することが期待されます。次に、オブジェクトを見てみましょう。
低くて見よ、それは私たちが期待していたものではなく、奇妙な理由で20です。それが私が立ち往生するところです、私はここでシーンズの後ろで起こっていることを解決することができません。なぜ50から20に変更されているのか、なぜ設定した値を保持しないのですか?それが少し良く説明することを願っています。
解決
マージンの値は100インチで、デフォルト値は100(= 1インチ)です。 5 mmは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);
}
また、PagesSetupDialogには有効化されたプロパティがあり、問題も解決する必要があります。私はこれをテストしていません。見る ここ.
PageSetupDialog psd = new PageSetupDialog();
psd.EnableMetric = true;
他のヒント
これ以上コードを見ることができないので、私はそれに私の「最高の推測」を与えるつもりです。
私の考えでは、ダイアログが開いているときにコードが2の値を設定しているということです。設定は5として保存されますが、ダイアログはハードコーディングされた設定のために2を表示します。ダイアログ表示の設定の読み取りを無効にするものはないことを確認してください。
あるいは、フォームを保存すると、値を無効にするものがあります。
設定を読み取り、コードを読み取り、コードを書き込み、コードのハードコーディングに「2」があるかどうかを確認します。