2014-11-05 24 views
0

我正在開發一個小應用程序。我試圖使用AutoScaleMode =字體,它的作用就像一個魅力除了一個我的所有意圖,我想要一些特定的控件具有粗體文本,但是,然後,他們不會自動縮放字體大小時更改。C#AutoScaleMode字體,粗體控件不縮放

是否可以更改控件的默認字體,但仍然是AutoScale作爲控件的其餘部分?

在此先感謝

回答

1

您可能正在使用字體縮放做到這一點並不打算做的一項工作。它旨在補償目標機器上不同的視頻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()來解決這個問題。