netlib.narod.ru | < Назад | Оглавление | Далее > |
Четыре следующих конструктора аналогичны предыдущим за исключением того, что первым аргументом выступает объект FontFamily, а не текстовая строка с названием гарнитуры:
Конструкторы Font (выборочно)
Font(FontFamily ff, float fSizeInPoints) |
Font(FontFamily ff, float fSizeInPoints, FontStyle fs) |
Font(FontFamily ff, float fSize, GraphicsUnit gu) |
Font(FontFamily ff, float fSize, FontStyle fs, GraphicsUnit gu) |
Возникает вопрос: как получить объект FontFamily?
Во-первых, из имеющегося шрифта. Например, если нужно получить шрифт на основе существующего, но с другими размерами, можно сослаться на свойство Name имеющегося шрифта, как было показано в программе HowdyWorld:
Font font18 = new Font(font.Name, 18, font.Style);
А можно в качестве первого аргумента использовать свойство FontFamily:
Font font18 = new Font(font.FontFamily, 18, font.Style);
Кроме того, объект FontFamily можно получить используя один из трех его конструкторов:
Конструкторы FontFamily
FontFamily(string strFamily) |
FontFamily(GenericFontFamilies gff) |
FontFamily(string strFamily, FontCollection fontcoll) |
Первый конструктор предполагает, что объект FontFamily целиком определяется названием гарнитуры. Действительно, инструкция
Font font = new Font(strFamily, fSizeInPoints);
это просто короткая форма записи инструкции
Font font = new Font(new FontFamily(strFamily), fSizeInPoints);
Единственное нестатическое свойство FontFamily — это его название:
Нестатические свойства FontFamily
Тип | Свойство | Доступ | Описание |
string | Name | Чтение | Название гарнитуры |
Хотя можно создать Font не создавая FontFamily в явном виде, иногда переменная типа FontFamily оказывается полезной:
FontFamily ff = new FontFamily{strFamily);
Чтобы определить, доступен ли какой-либо стиль шрифта, можно использовать метод IsStyleAvailable:
Методы FontFamily (выборочно)
bool IsStyleAvailable(FontStyle fs) |
Не все шрифты TrueType или OpenType имеют полужирное или курсивное начертания, и, если попытаться создать курсивное или полужирное начертание для таких шрифтов, будет сгенерировано исключение. Хуже того, не все шрифты имеют нормальное начертание! Поэтому имеет смысл писать код вот так:
if (ff.IsStyleAvailable(FontStyle.Italic)) fontItalic = new Font(ff, 24, FontStyle.Italic); else if (ff.IsStyleAvailable(FontStyle.Regular) fontItalic = new Font(ff, 24, FontStyle.Regular); else fontItalic = new Font(ff, 24, FontStyle.Bold);
Этот код может не привести к созданию курсивного шрифта, но он хоть не сгенерирует исключение.
Как я уже говорил, для многих гарнитур разные начертания шрифтов содержатся в разных файлах. Иногда Windows синтезирует курсивное и полужирное начертания, т.е. создает курсивные, полужирные и курсивные полужирные версии, видоизменяя знаки нормального шрифта. Это происходит в случае шрифтов Symbol, Wingdings и Webdings.
Второй конструктор FontFamily требует участия элементов перечисления GenericFontFamilies, определенного в System.Drawing.Text:
GenericFontFamilies
Член | Значение | Описание |
Serif | 0 | Например, Times New Roman |
SansSerif | 1 | Например, Arial |
Monospace | 2 | Например, Courier New |
Я уже предупреждал о возможных проблемах при создании шрифта на основе названия гарнитуры, если этой гарнитуры нет в системе:
font = new Font("Times New Roman", 24);
Вы будете спокойнее себя чувствовать, применяя конструкцию:
font = new Font(new FontFamily(GenericFontFamilies.Serif), 24);
Конечно, это выглядит довольно громоздко и не очень элегантно, но есть более короткая равнозначная версия, использующая одно из статических свойств FontFamily.
Статические свойства FontFamily (выборочно)
Тип | Свойство | Доступ | Описание |
FontFamily | GenericSerif | Чтение | Например, Times New Roman |
FontFamily | GenericSansSerif | Чтение | Например, Arial |
FontFamily | GenericMonospace | Чтение | Например, Courier New |
Можно создать шрифт, например, так:
font = new Font(FontFamily.GenericSerif, 24);
Третий конструктор FontFamily мы рассмотрим далее в этой главе.
netlib.narod.ru | < Назад | Оглавление | Далее > |