C#刷到字符串

我搜索一种方法来将画笔的颜色保存为字符串。 例如,我有一个红色的画笔。 现在我想在文本框中写“红色”。

谢谢你的帮助。

如果使用System.Drawing.ColorColor创建了Brush ,则可以使用ColorName属性。

否则,您可以尝试使用reflection查找颜色

 // hack var b = new SolidBrush(System.Drawing.Color.FromArgb(255, 255, 235, 205)); var colorname = (from p in typeof(System.Drawing.Color).GetProperties() where p.PropertyType.Equals(typeof(System.Drawing.Color)) let value = (System.Drawing.Color)p.GetValue(null, null) where value.R == b.Color.R && value.G == b.Color.G && value.B == b.Color.B && value.A == b.Color.A select p.Name).DefaultIfEmpty("unknown").First(); // colorname == "BlanchedAlmond" 

或者自己创建一个映射(并通过Dictionary查看颜色),可能使用周围的许多颜色表中的一个 。

编辑:

您写了一条评论说您使用System.Windows.Media.Color ,但您仍然可以使用System.Drawing.Color来查找颜色的名称。

 var b = System.Windows.Media.Color.FromArgb(255, 255, 235, 205); var colorname = (from p in typeof(System.Drawing.Color).GetProperties() where p.PropertyType.Equals(typeof(System.Drawing.Color)) let value = (System.Drawing.Color)p.GetValue(null, null) where value.R == bR && value.G == bG && value.B == bB && value.A == bA select p.Name).DefaultIfEmpty("unknown").First(); 

这是什么类型的刷子? 如果是绘图命名空间,那么brush是一个抽象类。 对于SolidBrush,请执行以下操作:

brush.Color.ToString()

否则,获取color属性并使用ToString()方法将颜色转换为其字符串表示forms。

基本上我会发布已经回答的内容。

 string color = textBox1.Text; // best, using Color's static method Color red1 = Color.FromName(color); // using a ColorConverter TypeConverter tc1 = TypeDescriptor.GetConverter(typeof(Color)); // ..or.. TypeConverter tc2 = new ColorConverter(); Color red2 = (Color)tc.ConvertFromString(color); // using Reflection on Color or Brush Color red3 = (Color)typeof(Color).GetProperty(color).GetValue(null, null); // in WPF you can use a BrushConverter SolidColorBrush redBrush = (SolidColorBrush)new BrushConverter().ConvertFromString(color); 

原始答案: 在C#中将字符串转换为画笔/画笔颜色名称