FontFamily вопрос - PullRequest
       6

FontFamily вопрос

0 голосов
/ 12 декабря 2008

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

Ответы [ 2 ]

4 голосов
/ 12 декабря 2008

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

Помните, использование enum было бы невозможно. Перечисление - это статическая функция времени компиляции, которая означает, что она не может «генерировать» перечисление динамически из шрифтов вашей системы. В самом деле, включение чего-либо такого специфического в язык, вероятно, было бы плохой идеей. Даже если бы это было поддержано, на компьютере пользователя не было бы таких же шрифтов, как у вас - некоторые шрифты были бы неправильно включены в список, а некоторые исключены (потому что после компиляции 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 голосов
/ 12 декабря 2008

Поскольку Enum - это набор фиксированных значений, который вызывает перекомпиляцию при его изменении (и в этом случае это в конечном итоге будет означать: новый выпуск платформы).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...