2017-09-19 78 views
0

我试图将从注册表项读取的颜色设置转换为System.Drawing.Color。我铸造是从注册表中的System.Drawing.Color返回的对象,本文以下内容:Convert OBJECT to System.Drawing.ColorC#将对象投射到System.Drawing.Color

System.Drawing.Color color = (System.Drawing.Color)result; 

这里有一对夫妇,我越来越为对象,这些注册表值的例子:

Type  Data 
REG_SZ Color [Olive] 
REG_SZ Color [A=255, R=255, G=128, B=128] 

将第一个注册表项转换为System.Drawing.Color可以正常工作,但是在投射第二个键时,出现“指定的转换无效”错误。能够将这两个键都转换为System.Drawing.Color的最佳方式是什么?

编辑:我认为解决这个最简单的方法是写注册表时,我转换颜色到ARGB(INT32),这样,当我看到它,我可以只使用Color.FromArgb(除非有另一个解决方案我完全缺失)。

+0

怎么样'System.Drawing.Color.FromName (结果);' –

+1

或'FromArgb(Int32,Int32,Int32,Int32)'。请参阅https://msdn.microsoft.com/en-us/library/at1k42eh(v=vs.110).aspx –

+1

它与链接的Q + A不同,它使用了反射,它实际上返回了一个盒装的Color 。但这里只是一个普通的字符串。 “橄榄[橄榄]”当然也不能投。您必须使用ColorConverter。 –

回答

1

您从注册表中获得什么可能是一个字符串,因此使用ColorConverter类从这个page

这里建议是一个示例代码:

Color regColor = (Color)ColorConverter.ConvertFromString((string)result); 
+0

包含一些代码,显示如何使用ColorConverter而不是依赖外部链接(这可能会中断)是很好的。 – mason

+0

实施您的建议后,我收到一个异常“颜色[A = 255不是Int32的有效值。”内部例外是“输入字符串格式不正确”。输入字符串是“彩色[A = 255,R = 255,G = 128,B = 128]”。 – Riccaforte