2012-12-28 17 views
2

有沒有辦法在C#中設置Windows Forms控件的字體,逗號分隔的字體列表?我想要的東西類似於瀏覽器如何解釋CSS字體系列的位置,直到它找到計算機上安裝的第一個字體。如何從HTML/CSS風格的字符串(例如:Futura,Verdana,Arial)在C#winforms控件(例如TextBox)中設置FontFamily

例子:

string fontList = "Obscure Font1, Obscure Font2, Verdana" 
textBox1.Font = new Font(FontFamilyFromHtml(fontList), FontStyle.Bold); 

有內置在.NET任何東西,或做你需要創建一個將分裂的逗號串的方法,然後測試每個已安裝的字體列表中,直到比賽是發現了什麼?

+0

string.Split()...... –

+0

新的FontFamily()拋出異常 – johan

+0

@MitchWheat - 請重新打開,所以我可以發佈解決方案。 – blak3r

回答

3

沒有開箱即用的API調用,因此您必須拆分字符串並搜索已安裝的字體。

下面是使用InstalledFontCollection能夠做到這一點的實現:

private FontFamily FindFontByCSSNames(string cssNames) 
{ 
    string[] names = cssNames.Split(','); 
    System.Drawing.Text.InstalledFontCollection installedFonts = new System.Drawing.Text.InstalledFontCollection(); 
    foreach (var name in names) 
    { 

     var matchedFonts = from ff in installedFonts.Families where ff.Name == name.Trim() select ff; 

     if (matchedFonts.Count() > 0) 
      return matchedFonts.First(); 
    } 

    // No match, return a default 
    return new FontFamily("Arial"); 
} 
相關問題