Подтвердить что ты не робот

Правильный подход к автоматическому масштабированию

Я работаю с другим разработчиком в приложении WinForms, и у нас большая проблема с внешним видом, связанным с автоматическим масштабированием.

Моя система (Sony VAIO) по умолчанию имеет значение 125% в этом меню:

Display scaling

Из того, что я могу сказать, 125% устанавливает DPI на 120, а размер шрифта по умолчанию (меню и т.д.) - до 11pt. В другой системе разработчика его значения по умолчанию равны 100%, что составляет 96 точек на дюйм, и шрифт 9pt. Я не уверен, но я думаю, что только DPI - это то, что вызывает у нас печаль.

Проблема проявляется в том, что текст является неправильным размером и либо закрывает другие элементы управления, либо становится слишком разнесенным (в зависимости от того, кто его открыл в дизайнере последним). Насколько я могу судить, все ContainerControl установлены на AutoScaleMode.Inherit, а форма верхнего уровня AutoScaleMode.Dpi. Это то, что используют большинство других людей?

4b9b3361

Ответ 1

У меня была такая же проблема с одним из моих приложений. Ответ состоял в том, чтобы переместить его в WPF. Решение, с которым я пришел, когда я все еще использовал WinForms, состоял в том, чтобы иметь 2 исполняемых файла. Один из них разработан под 96DPI, а другой - под 120DPI. Это было двойное усилие, но я безуспешно пробовал любые конфигурации компоновки. Если мои элементы управления отлично смотрелись на 96DPI, при переключении на 120DPI они были вне приложения окна. И наоборот.

WPF - единственное решение этой раздражающей проблемы.

Ответ 2

Это может быть проблема с привязкой компонентов в вашей форме. Например, форматирование может быть затронуто, если компоненты не привязаны ко всем четырем углам и изменениям dpi.

Когда я изменил dpi на своем компьютере и открыл конструктор, я не видел проблем с форматированием... Может быть, может помочь дополнительная информация. Какие компоненты охватывают друг друга?

Ответ 3

В конце концов, нашим решением было отключить автомасштабирование, установив AutoScaleMode = AutoScaleMode.None. Это потребовало некоторого тщательного размещения вещей (и оставило большие пробелы, чем хотелось бы), но, по крайней мере, Auto-Scale не пришла и не испортила вещи.

Это кажется большой проблемой, потому что даже части VisualStudio видели экспонаты из-за моих более высоких настроек экрана.