Страницы продолжают модифизировать неожиданно

StackOverflow https://stackoverflow.com/questions/4286339

  •  28-09-2019
  •  | 
  •  

Вопрос

Похоже, вы можете сохраняться в настройках файловых принтеров, а также страниц, они сериализуются и т. Д. Отлично! Все идет хорошо, пока не пытался сохранить мои страницы и поля. Каждый раз, когда я изменяю маржу, сохраняю настройки, а затем перезагрузите их обратно в PagesEntePDialog.pagesettings - они были изменены. кто-нибудь знает, почему это произошло? Это то, что водитель или окна делают? Его причудливый, см. Ниже:

Здесь я покажу диалог:

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

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

alt text

Я вручную изменить значения до 5.

Затем я сохраняю изменения:

MySettings.Default.pageSettings = psd.PageSettings;

Когда я перезагружаю диалог и загрузите в настройки из файла настроек, значения изменились на 2!?

alt text

ОБНОВИТЬ:

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

alt text

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

Затем мы редактируем их все до 5 в диалоговом окне и нажмите OK - поэтому пройти через этот код:

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

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

alt text

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

Это было полезно?

Решение

Значения для полей находятся в сотых дюймах, причем значение по умолчанию 100 (= 1 дюйм). 5 мм равно 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);
}

Ваши PageSepDialog также имеет Enablemetric свойство, которое также должно решить ваши проблемы. Я не проверил это, хотя. Видеть здесь.

PageSetupDialog psd = new PageSetupDialog();
psd.EnableMetric = true;

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top