プロが教える店舗&オフィスのセキュリティ対策術

通常、フォントに太字やイタリック体を指定する場合、
new Font("Arial", 10, FontStyle.Bold|FontStyle.Italic)
のように「|」で区切った形で指定すると有りますが、
FontStyleの部分を変数を使って指定したいと考えています。

FontStyle styles = new FontStyle();
styles.Add(FontStyle.Bold); // 実際にはできません
styles.Add(FontStyle.Italic);
new Font("Arial", 10, styles);

スタイルの情報は配列「bold, italic, underline, strikeout」のように保存されていて、
配列にboldが含まれていれば「FontStyle.Bold」を加えるといった流れが目的です。

Listを変換できないものかと試したりもしてみましたが例外が発生してしまいます。

List<Enum> styleList = new List<Enum>();
styleList.Add(FontStyle.Bold);
styleList.Add(FontStyle.Italic);
FontStyle styles = (FontStyle)Enum.ToObject(typeof(FontStyle), styleList);
Font font = new Font("Arial", 12, styles);

どのように解決すればいいのでしょうか?
よろしくお願いします。

A 回答 (1件)

> 「|」で区切った形で指定する


"|"はOR演算子ですので、
「"|"で区切る」というよりは「各フラグのビットごとのORをとる」という解釈が望ましいです。

・Listを使わない例
FontStyle styles = FontStyle.Regular;
styles |= FontStyle.Bold;
styles |= FontStyle.Italic;
new Font("Arial", 10, styles);

・Listを使う例
List<FontStyle> styleList = new List<FontStyle>();
styleList.Add(FontStyle.Bold);
styleList.Add(FontStyle.Italic);
FontStyle styles = FontStyle.Regular;
foreach(FontStyle style in styleList){
 styles |= style;
}
Font font = new Font("Arial", 12, styles);
    • good
    • 0
この回答へのお礼

FontStyleは複数のフラグを持っているものと誤解していたのですが、実際には論理和の結果が代入されていたんですね。
教えて頂いたサンプル非常に役に立ちました。
ありがとうございます。

お礼日時:2014/05/20 12:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このQ&Aを見た人がよく見るQ&A