将十六进制字符串转换为颜色

3

我正在传递一个十六进制值到我的 QueryString 中。我希望将其转换为一种颜色,以便在网格视图中的单元格中使用 ForeColor。尝试使用 System.Drawing.ColorTranslator.FromHtml()System.Drawing.Color.FromArgb(),但都没有成功。

我的 QueryString 已进行 url 编码,因此重要部分如下:

QueryString...&color=%23AA4643

以下是我尝试使用 .FromArg 的方式:
string sColor = Request.QueryString["color"]; // sColor is now #AA4643
Int32 iColorInt = Convert.ToInt32(sColor,16); //Get error message - Could not find any recognizable digits
Color curveColor = System.Drawing.Color.FromArgb(iColorInt); //Never makes it here

以下是我尝试使用.FromHtml的方法:

string sColor = Request.QueryString["color"]; 
System.Drawing.Color myColor = new System.Drawing.Color();
myColor = System.Drawing.ColorTranslator.FromHtml(sColor);

在此情况下,myColor被设置为 - myColor =“{Name = ffaa4643,ARGB =(255,170,70,67)}”

但当我尝试使用它时,出现错误:

索引超出范围。必须是非负数且小于集合大小的值。 参数名:索引

非常感谢任何和所有的帮助。

1个回答

8

试试这个:

string sColor = Request.QueryString["color"]; // sColor is now #AA4643
Int32 iColorInt = Convert.ToInt32(sColor.Substring(1),16); 
Color curveColor = System.Drawing.Color.FromArgb(iColorInt); 

谢谢,这样就可以跳过出错的那一行并将curveColor设置为:curveColor = "{Name=aa4643, ARGB=(0, 170, 70, 67)}"但是当我在网格中使用它时,我得到了与其他尝试相同的错误“索引超出范围。必须是非负数且小于集合大小。参数名称:索引” - RichP
这意味着有时候你的 Request.QueryString["color"] 是空的。请在调试器下检查它。 - SergeyS
1
SergeyS,你的解决方案确实有效,我的另一个方案也是。我太专注于颜色了,没有看到我设置它的位置。我需要在调用grid.DataBind之后设置颜色。我的网格中还没有行...太关注颜色的转换,忽略了显而易见的问题。谢谢!顺便说一句,这也有效:System.Drawing.ColorConverter oConverter = new System.Drawing.ColorConverter();``Color myColor = (Color)oConverter.ConvertFromString(sColor); - RichP

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接