C# AutoScaleMode Шрифт, элементы управления Bold не масштабируются
Я разрабатываю небольшое приложение. Я пытаюсь использовать AutoScaleMode = Font
и это работает как брелок для всех моих намерений, кроме одного, я хочу, чтобы некоторые конкретные элементы управления имели жирный текст, но затем они не масштабируются автоматически при изменении размера шрифта.
Можно ли изменить шрифт по умолчанию для элемента управления, но все же AutoScale
как остальные элементы управления?
заранее спасибо
1 ответ
Вы, вероятно, используете масштабирование шрифта для выполнения работы, для которой оно не было предназначено. Он был разработан, чтобы компенсировать другое видео DPI на целевой машине. И да, вы также можете использовать его для изменения масштаба формы, изменив свойство Font формы. Но тогда у вас возникнут проблемы с элементами управления, которые не "наследуют" шрифт своего родителя. Вы должны обновить их свойство Font самостоятельно.
Выполнение этого автоматически требует итерации элементов управления наизнанку, обновляя только те, которые не наследуют шрифт своего родителя. Это сработало хорошо:
public static void ScaleFonts(Control ctl, float multiplier) {
foreach (Control c in ctl.Controls) ScaleFonts(c, multiplier);
if (ctl.Parent == null || ctl.Parent.Font != ctl.Font) {
ctl.Font = new Font(ctl.Font.FontFamily,
ctl.Font.Size * multiplier, ctl.Font.Style);
}
}
Пример использования:
private void Form1_Load(object sender, EventArgs e) {
ScaleFonts(this, 1.25f);
}
Возможный режим сбоя - запуск событий макета при этом, что приводит к неправильной компоновке. Это трудно объяснить, вам может потребоваться вызвать Suspend/ResumeLayout(), чтобы это исправить.