Alex Rivera | Logout

Convert string to Brushes/Brush color name in C#

Asked 2008-12-16T21:01:04.837
44

I have a configuration file where a developer can specify a text color by passing in a string:

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

Rather than have a gigantic switch statement look for all of the possible colors, it'd be nice to just use the properties in the class System.Drawing.Brushes instead so internally I can say something like:

 Brush color = Brushes.Black;   // Default

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

Except that the values in Brush/Brushes aren't enums. So Enum.Parse gives me no joy. Suggestions?

Edit
Report

3 Answers

84

Recap of all previous answers, different ways to convert a string to a Color or Brush:

// 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");
answered 2009-05-22T20:24:44.597
1

I agree that using TypeConverters are the best method:

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

If you want, you can extend this even more and allow them to specify values for the R, G and B values. Then you just call Color.FromArgb(int r, int g, int b);

answered 2008-12-16T21:10:30.933

Your Answer