みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

C#でFontStyleの列挙体に値を追加したい

通常、フォントに太字やイタリック体を指定する場合、
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);

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

投稿日時 - 2014-05-20 10:57:25

QNo.8602909

困ってます

質問者が選んだベストアンサー

> 「|」で区切った形で指定する
"|"は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);

投稿日時 - 2014-05-20 11:58:42

お礼

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

投稿日時 - 2014-05-20 12:54:13

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問