为什么Font对象的FontFamily参数是字符串而不是枚举?
答案 0 :(得分:4)
FontFamily是指Font的名称。虽然你可以使用“monospace”或“serif”,但我认为它不会得到.Net的支持。
请记住,使用枚举是不可能的。枚举是静态编译时功能,这意味着它无法从系统上的字体动态“生成”枚举。实际上,在语言中包含任何特定内容可能都是一个糟糕的主意。即使支持这种情况,用户的机器也不会拥有与您相同的字体 - 某些字体将被错误地包含在列表中,而一些字体将被排除(因为一旦编译枚举变为'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();
}
}
}
答案 1 :(得分:3)
因为Enum是一组固定值,当它发生变化时会强制重新编译(在这种情况下,这最终意味着:框架的新版本)。
字体系列可能会发生变化,可用字体因主机系统而异。