Как установить несколько FontStyles при создании экземпляра шрифта?

При взгляде на конструкторы для класса System.Drawing.Font есть параметр для передачи в одном из FontStyles, определенных в перечислении System.Drawing.FontStyle.

т.   Жирный   курсивный   регулярное   Подчеркивание

и существуют булевы свойства для Bold, Italic, Underline и т.д. в экземплярированном объекте, но они доступны только для чтения.

Что делать, если я хочу, чтобы мой шрифт имел несколько стилей, таких как Bold и Underline?

Как я могу это сделать?

Ответы

Ответ 1

Переменная FontStyle представляет собой перечисление Flags. Это означает, что его члены имеют все полномочия в два, что позволяет вам комбинировать их с помощью двоичного OR.

Например, если вы хотите полужирный и подчеркивающий, вы должны передать

FontStyle.Bold | FontStyle.Underline

Вертикальная строка (|) является двоичным оператором OR.

Ответ 2

В конструкторе Font вы можете комбинировать несколько FontStyles с помощью оператора OR:

Font font = new Font(this.Font, FontStyle.Bold | FontStyle.Underline);

Ответ 3

Вы можете использовать что-то вроде этого, чтобы избежать множественных ifs для каждого случая:

//define a font to use.
Font font;

font = new Font(fontname, fontsize, GraphicsUnit.Pixel);

if (bold)
    font = new Font(font, font.Style ^ FontStyle.Bold);
if (italic)
    font = new Font(font, font.Style ^ FontStyle.Italic);
if (underline)
    font = new Font(font, font.Style ^ FontStyle.Underline);
if (strikeout)
    font = new Font(font, font.Style ^ FontStyle.Strikeout);