Могу ли я сказать Visual Studio не изменять DPI проекта? - PullRequest
6 голосов
/ 02 ноября 2010

У меня есть проект, преобразованный из .NET 1.1 в 3.5, который разрабатывается в 2008 году.

Если я открою проект в Windows 7, он преобразует размер всего в размеры 120 точек на дюйм.Если я тогда открою его с 96 точек на дюйм, он снова изменится.Есть ли какой-то способ для меня, чтобы он выглядел хорошо в обоих случаях, и не заставляет Visual Studio изменять размеры, если он открыт в системе с другим DPI?

Этот вопрос, возможно, лучше сформулирован/ продублировано здесь: настройка dpi для Visual Studio Designer

Или здесь: Проблема Visual Studio и DPI

Чтобы было понятно, что я пытаюсь сделатьпредотвращает изменение размера элемента управления в конструкторе при использовании несколькими разработчиками с различными настройками DPI.Во всех случаях, когда я замечал эту проблему, я работал с проектом .NET 1 или .NET 2, обновленным до первоначальной версии Visual Studio 2008, а теперь - Visual Studio 2010.

Обновление (на случай, если кто-то захочет конкурировать с @Ben за бонусные баллы): у меня есть форма, которая правильно изменяет размер, но размер окна изменяется программно.Поскольку проектировщик не знает об измерениях, окно изменяет размеры неправильно, если разработчик, использующий другой DPI, касается формы.Есть ли способ обойти эту проблему, кроме возврата к не масштабированию пользовательского интерфейса во время выполнения?

Например: у меня есть два объявленных размера моего окна, которые работают правильно, если разработчики используют 120 dpi во время разработки:

private static Size smallSize = new Size(960, 500);
private static Size largeSize = new Size(960, 615);

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

Ответы [ 2 ]

9 голосов
/ 12 июля 2011
1 голос
/ 22 декабря 2016

Поскольку я недавно столкнулся с той же проблемой, я хочу поделиться своим обходным путем.

Первый: KEEP AutoScaleMode = Font!Это будет хорошо работать во время выполнения, чтобы ваше приложение поддерживало DPI.(Даже отличная поддержка DPI для каждого монитора).

Тем не менее, WinForms Designer в Visual Studio фактически оценивает размеры шрифтов на основе DPI системы и, таким образом, изменяет масштаб всякий раз, когда считает это необходимым.Это суть проблемы.Эта оценка вызвана тем, что шрифты обычно указывают свой размер в «точке» (чтобы пользовательский интерфейс не зависел от DPI).

Мой обходной путь - изменить это на время разработки:

  • Установите в своем дизайнере форм: Font = MS Sans; 11px.Это в основном шрифт по умолчанию для ОС, но он указывается в пикселях.Таким образом, изменение масштаба во время разработки никогда не произойдет.
  • Теперь, чтобы вернуть адаптацию с высоким разрешением во время выполнения, измените шрифт обратно, чтобы использовать размеры, указанные в точке.Например, Font = SystemFonts.Default.Хорошее место в Ctor сразу после InitializeComponents.

Я написал подробности о моем обходе в своем блоге: http://www.sgrottel.de/?p=1581&lang=en

...