40

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

 <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 は私に喜びを与えません。提案?

4

10 に答える 10

77

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

// 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");
于 2009-05-22T20:24:44.597 に答える
16

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

Brush myBrush = new SolidBrush(Color.FromName("Red"));
于 2009-10-09T05:08:03.800 に答える
8

ああ。しばらく探した後、次のことがわかりました。

 Color.FromName(a.Value)

「投稿」を押した後。そこから、以下への短いステップです。

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

この質問は他の人のためにここに残します....

于 2008-12-16T21:04:35.343 に答える
3

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

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

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

于 2008-12-16T21:07:56.867 に答える
1

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

 Color c = (Color)TypeDescriptor.GetConverter(typeof(Color)).ConvertFromString("Red");
 return new Brush(c);
于 2008-12-17T20:55:25.783 に答える
0

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

于 2008-12-16T21:10:30.933 に答える
-1

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

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

もう 1 つの方法は、リフレクションを使用して、 のプロパティを確認することSystemBrushesです。

于 2008-12-16T21:03:51.883 に答える
-2

System.Drawing.KnownColor列挙型を使用できます。すべての既知のシステム カラーを指定します。

于 2016-11-22T15:07:36.930 に答える