2008-12-12 4 views
0

Почему параметр FontFamily объекта Font является строкой, а не перечислением?FontFamily question

+0

дружеского совет: вы должны действительно Google этого типа материала первого - или по крайней мере, убедитесь, что вы точно понимаете *, что такое перечисление. – 2008-12-12 07:48:55

ответ

4

FontFamily ссылается на название шрифта. Хотя вы могли бы использовать «monospace» или «serif», я бы не подумал, что это будет поддерживаться .Net.

Помните, что использование перечисления было бы невозможным. Перечисление представляет собой статическую функцию времени компиляции, что означает, что она не может «генерировать» динамическое перечисление из шрифтов в вашей системе. В самом деле, в том числе, что-то подобное на языке, вероятно, было бы плохой идеей. Даже если это было подтверждено, у машины пользователя не были бы такие же шрифты, как у вас - некоторые шрифты были бы неправильно включены в список, а некоторые исключены (потому что после компиляции enum становится «final»).

Enums - удобный магазин интегральных констант и НИЧЕГО еще. Каждый элемент в перечислении имеет удобное имя и значение, даже если вы не укажете его. Следующие два перечисления одинаковы.

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 - это набор фиксированных значений, который заставляет повторно компилировать, когда он изменяется (и в этом случае это в конечном итоге означает: новый выпуск фреймворка).

Семейство шрифтов может быть изменено, а имеющиеся шрифты отличаются от хост-системы к системе хоста.

Смежные вопросы