0
我正在開發一個小應用程序。我試圖使用AutoScaleMode =字體,它的作用就像一個魅力除了一個我的所有意圖,我想要一些特定的控件具有粗體文本,但是,然後,他們不會自動縮放字體大小時更改。C#AutoScaleMode字體,粗體控件不縮放
是否可以更改控件的默認字體,但仍然是AutoScale作爲控件的其餘部分?
在此先感謝
我正在開發一個小應用程序。我試圖使用AutoScaleMode =字體,它的作用就像一個魅力除了一個我的所有意圖,我想要一些特定的控件具有粗體文本,但是,然後,他們不會自動縮放字體大小時更改。C#AutoScaleMode字體,粗體控件不縮放
是否可以更改控件的默認字體,但仍然是AutoScale作爲控件的其餘部分?
在此先感謝
您可能正在使用字體縮放做到這一點並不打算做的一項工作。它旨在補償目標機器上不同的視頻DPI。是的,你可以也通過改變窗體的字體屬性使用它來重新縮放您的窗體。但是,那麼你會遇到不能「繼承」父母字體的控件。你必須自己更新他們的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()來解決這個問題。