Почему новая поддержка AutoScale в Visual Studio 2017 изменяет размер приложения Forms во время выполнения? - PullRequest
0 голосов
/ 30 января 2019

У нас есть приложение для Windows Forms, используемое для тестирования наших продуктов, которое в течение почти 10 лет имело почти одинаковые формы и диалоги.AutoScaleMode в конструкторе имеет значение «Шрифт» для обеих форм, и это не изменилось со времени первоначального дизайна.AutoSize установлен в false и просто для хорошей меры (я предполагаю) AutoSizeMode установлен в GrowOnly.Следующие исходные строки находятся в Program.cs:

Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);

Помните, это работало безупречно в течение многих лет ...

Одно из последних обновлений VS2017 включало поддержку AutoScale для мониторов сразные DPI.У меня монитор с относительно высоким разрешением, поэтому, когда я внес некоторые изменения в диалоговое окно «Настройки» (добавление элементов управления и т. Д.), Я начал получать ярко-желтые баннеры, пересекающие верхнюю часть дизайнерской поверхности, сообщая, что для AutoScaling установлено значение 125%, и яхотели бы изменить это?Я пытался идти вперед и назад, и когда в режиме 100% (автоматическое масштабирование выключено), меня предупреждали, что формы XAML могут отображаться некорректно.Хорошо, я работаю с формами, поэтому я вернулся к "нормальному" масштабированию, и форма выглядела нормально.

Пока я не попытался запустить программу.Теперь, когда я запускаю программу, основная форма выглядит следующим образом (детали удалены, чтобы защитить виновных):

enter image description here

... но когда я открываюДиалог настроек выглядит так:

enter image description here

Yikes!На практике это выглядит хуже, относительные изображения здесь не отражают разницу в размерах и масштабе.

Я понятия не имею, что изменилось или как / почему это происходит, но я никак не могу применить это в производстве.Я пытался изменить настройки AutoScale, но безрезультатно.Может ли кто-нибудь указать мне правильное направление?

Заранее спасибо!

РЕДАКТИРОВАТЬ: Кажется, изменение масштаба происходит только на моем компьютере, когда я запускаю приложение в Debug.Что бы не мешало отображению форм на моей машине, это не делает этого на машинах моих сотрудников и не реплицируется на исполняемый файл, созданный сервером сборки.

В другой заметке я попробовал все настройки, связанные с DPI, которые я смог найти, добавил те, которых не было из-за возраста программы, но все безрезультатно.Ничто из того, что я пробовал, не повлияло на странность отображения программы на моем компьютере.Тьфу.

1 Ответ

0 голосов
/ 01 февраля 2019

Я перепробовал все приемы, которые только мог найти, кроме полного отключения AutoScale, и ничего не получалось.Я наконец объединил нашу ветку разработки с моей веткой функций и проверил все 270 изменений, выбрав самые старые настройки, которые я смог найти для всех параметров размера, всех элементов управления.Тьфу.По пути я наткнулся на следующую строку в файле Designer.cs для формы:

this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);

Этот параметр НЕ доступен, насколько я могу судить, от дизайнера Visual Studio, и я не могу ничего найтио том, как или почему это устанавливается.Я обнаружил, что в более ранней версии, которая работала, как и ожидалось, значения были (8F, 17F) - поэтому я вручную отредактировал строку, чтобы она соответствовала старой рабочей версии.Успех!

Я также проверил свои настройки отображения Windows, и значение пользовательского масштабирования составило 100%, поэтому я использовал взлом реестра, упомянутый в одной из статей, которые я нашел по первой ссылке в комментарии выше (спасибо, @Jimi), чтобы отключить автоматическое масштабирование в Visual Studio, затем отключить уведомление.Теперь я (наконец) вернулся к делу.

Взлом реестра: https://docs.microsoft.com/en-us/dotnet/framework/winforms/disable-dpi-awareness-visual-studio

...