web-dev-qa-db-ja.com

C#で文字列をブラシ/ブラシ色名に変換する

開発者が文字列を渡すことでテキストの色を指定できる構成ファイルがあります。

 <text value="Hello, World" color="Red"/>

巨大なswitchステートメントですべての可能な色を探すのではなく、代わりにSystem.Drawing.Brushesクラスのプロパティを使用するだけでいいので、内部的には次のように言えます。

 Brush color = Brushes.Black;   // Default

 // later on...
 this.color = (Brush)Enum.Parse(typeof(Brush), prasedValue("color"));

Brush/Brushesの値が列挙型ではないことを除きます。だから、Enum.Parseは私に喜びを与えません。提案?

38
Clinton Pierce

文字列を色またはブラシに変換するさまざまな方法、以前のすべての答えの要約:

// best, using Color's static method
Color red1 = Color.FromName("Red");

// using a ColorConverter
TypeConverter tc1 = TypeDescriptor.GetConverter(typeof(Color)); // ..or..
TypeConverter tc2 = new ColorConverter();
Color red2 = (Color)tc.ConvertFromString("Red");

// using Reflection on Color or Brush
Color red3 = (Color)typeof(Color).GetProperty("Red").GetValue(null, null);

// in WPF you can use a BrushConverter
SolidColorBrush redBrush = (SolidColorBrush)new BrushConverter().ConvertFromString("Red");
69
Lucas

ブラシをかける文字列:

myTextBlock.Foreground = new BrushConverter().ConvertFromString("#FFFFFF") as SolidColorBrush;

これが私の場合です!

43
Junior M

ブラシは次のように宣言できます

Brush myBrush = new SolidBrush(Color.FromName("Red"));
12
user186917

ああしばらく見て、私は見つけた:

 Color.FromName(a.Value)

「投稿」を押した後。そこから次のステップに進みます:

 color = new SolidBrush(Color.FromName(a.Value));

他の人のためにここにこの質問を残します。

8
Clinton Pierce

これにはリフレクションを使用できます:

Type t = typeof(Brushes);
Brush b = (Brush)t.GetProperty("Red").GetValue(null, null);

もちろん、文字列が間違っている場合、エラー処理/範囲チェックが必要になります。

2
Jon B

TypeConvertersを使用するのが最良の方法であることに同意します。

 Color c = (Color)TypeDescriptor.GetConverter(typeof(Color)).ConvertFromString("Red");
 return new Brush(c);
1
Brian Rudolph

TypeConverterを使用してみてください。例:

var tc = TypeDescriptor.GetConverter(typeof(Brush));

別の方法は、リフレクションを使用して、SystemBrushesのプロパティを調べることです。

0
leppie

必要に応じて、これをさらに拡張し、R、G、Bの値の値を指定できるようにすることができます。次に、Color.FromArgb(int r、int g、int b);を呼び出すだけです。

0
BFree