Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#刷到线_C#_String_Brush - Fatal编程技术网

C#刷到线

C#刷到线,c#,string,brush,C#,String,Brush,我搜索了一种将画笔颜色保存为字符串的方法。 例如,我有一把红色的刷子。 现在我想在文本框中写“红色” 谢谢你的帮助。基本上我会发布已经回复的内容 string color = textBox1.Text; // best, using Color's static method Color red1 = Color.FromName(color); // using a ColorConverter TypeConverter tc1 = TypeDescriptor.GetConverte

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


谢谢你的帮助。

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

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);

原始答案:

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

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);

原始答案:

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

brush.Color.ToString()


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

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

brush.Color.ToString()


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

如果
画笔是使用
System.Drawing.color
中的
颜色创建的,则可以使用
颜色
的属性

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

// 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"
或者自己创建一个映射(并通过
字典
查找颜色),可能使用周围的许多颜色表

编辑:

您写了一条评论说您使用了
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 == b.R &&
                       value.G == b.G &&
                       value.B == b.B &&
                       value.A == b.A
                 select p.Name).DefaultIfEmpty("unknown").First();

如果使用
System.Drawing.Color
中的
颜色创建
画笔
,则可以使用
颜色
的属性

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

// 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"
或者自己创建一个映射(并通过
字典
查找颜色),可能使用周围的许多颜色表

编辑:

您写了一条评论说您使用了
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 == b.R &&
                       value.G == b.G &&
                       value.B == b.B &&
                       value.A == b.A
                 select p.Name).DefaultIfEmpty("unknown").First();

你的确切意思是哪个
刷子
类?从哪个名称空间?可能的解决方案?我指的是System.Windows.Media.Brush下的笔刷类如果你使用的是
SolidColorBrush
这很简单-试试
Brush.Color.ToString()
,但我认为这可能会给出RGB表示,而不是像“红色”这样的名称。你对颜色的具体程度有什么想法吗?i、 e.转换
#FF0000
#DC143C
两者看起来都非常接近“红色”,但颜色非常不同。大多数
ToString(
)表示将尝试保留细节。。。如果你想要一个通用的颜色名称,你可能需要自己来做。你到底指的是哪个
笔刷类?从哪个名称空间?可能的解决方案?我指的是System.Windows.Media.Brush下的笔刷类如果你使用的是
SolidColorBrush
这很简单-试试
Brush.Color.ToString()
,但我认为这可能会给出RGB表示,而不是像“红色”这样的名称。你对颜色的具体程度有什么想法吗?i、 e.转换
#FF0000
#DC143C
两者看起来都非常接近“红色”,但颜色非常不同。大多数
ToString(
)表示将尝试保留细节。。。如果你想要一个通用的颜色名称,你可能需要自己来做这项工作。OP想要的是另一种方式。这是从字符串创建笔刷,而不是从笔刷创建名称。我明白了。我的错。toString()那么。OP想要的是另一种方式,它从字符串创建笔刷,而不是从笔刷创建名称。我明白了。我的错。toString()。我是指System.Windows.Media.Brush下的Brush类。当我在这个类中进行.toString时,我将成为颜色的编号,例如:#FF0000FFI表示System.Windows.Media.Brush下的笔刷类。当我在这个类中make.toString时,我将成为颜色的编号,例如:#ff0000ffff谢谢,我已更改为System.Drawing.color,现在我将成为with.Name颜色的正确名称。非常感谢!谢谢,我已经改为System.Drawing.Color,现在我变成了。使用正确的颜色名称命名。非常感谢!