2008-12-12 91 views
0

爲什麼Font對象的FontFamily參數是一個字符串而不是枚舉?FontFamily的問題

+0

一些友好的建議:你應該谷歌這類的東西 - 或者在最少確保你完全理解*確切地說*枚舉是什麼。 – 2008-12-12 07:48:55

回答

4

FontFamily指的是字體的名稱。雖然你可以使用「等寬」或「襯線」,但我不認爲它會被.Net支持。

請記住,使用枚舉是不可能的。枚舉是一個靜態編譯時功能,這意味着它不能從您的系統上的字體動態生成一個枚舉。事實上,包括任何這種特定的語言可能是一個不好的主意。即使支持,用戶的機器也不會與您的機器具有相同的字體 - 某些字體會被錯誤地包含在列表中,有些字體會被排除(因爲編譯enum會變成'final')。

枚舉是一個方便的積分常數存儲,沒有別的。枚舉中的每個項目都有一個方便的名稱和值,即使您沒有指定它。以下兩個枚舉是相同的。

public enum MyEnum 
{ 
    A = 1, 
    B = 2 
} 

public enum FooEnum 
{ 
    A, 
    B 
} 

還有兩個問題,枚舉名不能包含空格,其中字體名稱可以。從枚舉中獲取字段不是一項簡單的任務(它需要大量的反射代碼)。

下面的代碼將讓你的字體列表(你將需要添加System.Drawing中作爲參考):

using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Text; 
    using System.Drawing.Text; 
    using System.Drawing; 

    namespace ConsoleApplication19 
    { 
     class Program 
     { 
      static void Main(string[] args) 
      { 
       InstalledFontCollection ifc = new InstalledFontCollection(); 

       foreach (FontFamily o in ifc.Families) 
       { 
        Console.WriteLine(o.Name); 
       } 
       Console.ReadLine(); 
      } 
     } 
    } 
3

因爲Enum是一組固定值,當它改變時強制重新編譯(在這種情況下,這最終意味着:框架的新版本)。

字體系列可能會更改,可用字體會因主機系統和主機系統而有所不同。

相關問題