2010-11-26 1 views
3

Кажется, что вы можете сохранить файл настроек PrinterSettings, а также PageSettings, они являются Serializable и т. Д. Отлично! Все прошло нормально, пока я не попытался сохранить свои страницы и поля. Каждый раз, когда я изменяю поля, сохраняю настройки, а затем перезагружаю их обратно в 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 le значения изменились на 2 !?

alt text

UPDATE:

Так просто попробовать и расширить проблемы - если мы покажем PageSetupDialog впервые со значениями настроек по умолчанию, которые являются 10 для всех полей. Если мы исследуем значение во время отладки, то мы видим их изображали как это:

alt text

Так они все 100, странно, но я ожидал, что они будут 10 т.е., как 10 мм, как говорит диалог, так что я не» t знать, какая единица измерения 100 имеет значение, но в любом случае позволяет предположить, что она коррелирует с 10 в диалоговом окне.

Мы затем редактировать их все 5 в диалоговом окне и нажмите кнопку ОК - чтобы мы пройти этот код:

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

поэтому мы ожидали бы увидеть на осмотр объекта pageSettingDialog, чтобы увидеть некоторые значения для поля должны быть все 5 (или 50, как представляется, в случае путаницы 10 против 100, см. выше). Давайте посмотрим на объект, то:

alt text

низкий и вот это не то, что мы ожидали, это 20 по какой-то странной причине. Вот где я застрял, я просто не могу понять, что происходит за ними. Почему он меняется от 50 до 20?, Почему он не сохранит значение, которое я установил? Надеюсь, это объяснит это немного лучше.

+0

Это происходит только при запуске (отладке) из Visual Studio или даже при запуске exe из Windows Explorer? – decyclone 2010-12-14 17:28:02

+0

Это происходит как в debug, так и в exe. – Vidar 2010-12-15 11:21:58

+0

Посмотрите мои изменения в оригинальной публикации. – Vidar 2010-12-15 14:25:05

ответ

4

Значения полей указаны в сотых долях дюйма со значением по умолчанию 100 (= 1 дюйм). 5 мм составляет 0,199645455 дюймов, что составляет 0,20. 0,20 раз 100 равно 20. См. this article on MSDN.

Это объясняет, что вы видите во время сеанса отладки. Что касается вашего диалога, я думаю, что есть некоторые проблемы культуры. Я посмотрю на это больше, если у меня есть время, но на данный момент я надеюсь, что это поможет вам немного дальше.

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

Поскольку у нас больше нет кода для просмотра, я собираюсь дать ему «лучшее предположение».

Я думал, что ваш код устанавливает значение 2 при открытии диалога. Настройки сохраняются как 5, но диалог отображает 2 из-за жесткого кодирования. Убедитесь, что в диалоговом окне ничего не меняется.

В качестве альтернативы, при сохранении формы есть что-то переопределяющее значение.

Посмотрите в своих настройках, прочитайте код и ваши настройки напишите код, чтобы узнать, есть ли в вашем коде «2» в любом месте жесткого кода.

 Смежные вопросы

  • Нет связанных вопросов^_^