сделать так, чтобы текст элемента управления Label выглядел так же хорошо, как в конструкторе форм VS - PullRequest
5 голосов
/ 20 ноября 2011

В VS2008 я разработал форму для C # DLL. DLL - это плагин для более старого приложения (около 2005 г.): назовем его «OldApp». В конструкторе форм VS текст в элементах управления Label на моей форме хорошо визуализируется: сглаживается и правильно кернингуется. Но когда я поднимаю эту форму в OldApp (где C # dll работает как плагин), текст в элементах управления Label выглядит некрасиво. Это разборчиво, но кернинг оставляет желать лучшего: буквы разнесены дальше друг от друга и с на первый взгляд случайными смещениями. Что я могу сделать, чтобы текстовые метки из OldApp выглядели так же хорошо, как в конструкторе форм VS? Я сомневаюсь, что конкретный шрифт имеет значение, но это Arial, 7,2 пт (VS2008 по умолчанию). Я попытался поиграть с двумя соответствующими строками в Program.cs (см. Ниже), но безрезультатно.

Application.EnableVisualStyles(); // tried using it and commenting it out
Application.SetCompatibleTextRenderingDefault(true); // tried true and false

Ответы [ 2 ]

0 голосов
/ 23 ноября 2011

После расследования у меня есть некоторые выводы, поэтому я просто отвечу на свой вопрос:

  1. Плохая новость: в OldApp используется отрисовка текста в старом стиле , которая и вызывает проблему. Я проверил это, переключив свойство UseCompatibleTextRendering для элемента управления меткой в ​​VS. Искажение шрифта, которое я вижу, такое же , которое я вижу в OldApp. Это означает, что строка Application.SetCompatibleTextRenderingDefault (false) в моем коде не имеет никакого эффекта . OldApp проигнорирует его и все равно выполнит рендеринг в старом стиле.

  2. Как подсказывает DeviantSeev, использование большего шрифта помогает немного. Это не избавляет от плохого кернинга, оно просто делает его менее заметным. Я увеличил шрифт только с 7.2pt до 8pt (не 12pt), потому что в противном случае диалоговое окно становится слишком большим. Это можно сделать с помощью свойства Font формы (не элемента управления). Таким образом, вы измените все элементы управления равномерно (если их свойство Font установлено по умолчанию).

  3. Размеры шрифта в VS кажутся дискретными, а не непрерывными, или, возможно, используется округление int () . Увеличение шрифта с 7.2pt до 7.4pt приводит к очень небольшим изменениям, в то время как при 7.5pt шрифт резко увеличивается в размере.

  4. Формы имеют свойство AutoScaleMode . Если установлено значение Шрифт , а форма изменяемый размер , размер формы изменится в VS пропорционально изменению размера шрифта. Таким образом, в VS вы можете найти приемлемую золотую середину между (разборчивым) размером шрифта и раздутым диалогом. Однако будьте осторожны: операция автоматического масштабирования может внезапно пойти не так, например, если вы измените значения шрифта единиц с точек на пиксели, дюймы и т. Д. Вы можете внезапно получить микроскопические элементы управления или форму большего размера. чем ваш экран и нажав отмена не исправит . Вы действительно не хотите заново проектировать свою форму, поэтому сохраните ее до любого изменения шрифта, а затем снова, когда вы будете довольны тем, что видите.

0 голосов
/ 22 ноября 2011

Я обнаружил похожую проблему на форумах MSDN, в которой упоминается добавление следующей строки после метода EnableVisualStyles ().

Application.DoEvents()

Кажется, что это ошибка в более старых версиях .NET ... какая версия выиспользуя

...