Странное поведение дизайнера форм Visual Studio при использовании параметра AutoScaleMode=AutoScaleMode.Dpi
Я встретился с очень странным поведением дизайнера форм Visual Studio при использовании параметра AutoScaleMode=AutoScaleMode.Dpi
Рассказываю по порядку.
Мне нужно, чтобы приложение, написанное на WinForms, одинаково работало независимо от устновки так называемого масштаба (Scale - параметра) в виндовс, что это такое - показано на картинке.
Чтобы продемонстрировать проблему, я написал простое придложение, из одной формы с трмя элеметами управления: label, combo box и picture box.
Приложение есть здесь.
(Оно просто меняет картинку в picture box в зависимости от выбора в combo box)
Когда у меня на компе Scale установленг в 100% - все хорошо:
Более того, если я оставлю в приложении AutoScaleMode "по умолчанию" (AutoScaleMode-AutoScaleMode.Font), то всё даже будет продолжать работать на компьютере пользователя, у которого установлен Scale=125%:
Картинка у пользователя будет "мыльная" (что связано, я полагаю, с алгоритмом масштабирования "на лету"), но в ней всё будет расположено правильно.
Сломается дизайнер форм вижуал студио, в нём всё будет примерно так:
Но настоящая проблема начнётся, если
закрыть студию
в файле Form1.Designer.cs поменять строку
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
на
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
- опять открть студию.
В этот момент начинается нечто, что я не могу описать другим словом, кроме как жесть.
Отображаемое на экране в дизайнере форм перестаёт соответствовать написанному в файле Form1.Designer.cs
Например, размер формы, который в файле Form1.Designer.cs написан как System.Drawing.Size(552, 331)
на экране отображается как 1420, 1070, причем это меняется в зависмости от того, на каком по размеру мониторе открыт проект. (впечатление, что Студия пытается открыть форму на весь экран, птому что чем больше монитор - тем больше видиый в дизайнере размер формы):
Также, location для picturebox меняется так, что его вообще нет на форме (у меня любое измерение в location было больше 2000px).
Причем, повторяю еще раз, это не отображается в файле Form1.Designer.cs.
Я проверил это на разных компьютерах (на двух с VS 2022 и на обном с VS 2019).
Также, я искал по словосочетанию "visual studio AutoScaleMode.Dpi designer", но наткнулся только на два достойных упоминания источника:
https://docs.microsoft.com/ru-ru/visualstudio/designers/disable-dpi-awareness?view=vs-2022 - здесь описаны общие проблемы масштабирования приложений
https://social.msdn.microsoft.com/Forums/windows/en-US/f126ccc4-1c2d-439f-af8f-0c825a01f51f/how-to-write-winforms-code-that-autoscales-to-system-font-and-dpi-settings?forum=winforms - здесь кто то задаёт похожий вопрос, но в ответе ни словом не упоминается о проблеме, которую я описал.
В связи с этим - два вопроса:
кто то с таким сталкивался? есть ли мысли, как с этим поступать?
Какие общие рекомендации Вы можете дать мне, чтобы писать Scale - независимые приложения, которые выглядят одинаково, независимо от установленного у пользователя Scale?
Спасибо заранее!




