我的行中的值等于-16777056,但如何将其强制转换为Color?
类似的东西:
Color = (Color) Convert.ToInt32(((DataRowView)this.dataGridView1.Rows[e.RowIndex].DataBoundItem)["Color"]) })
答案 0 :(得分:30)
颜色和数字之间的转换称为color-graphemic synesthesia,具有此条件的人可以识别数字的颜色(甚至形状或“感觉”)。但是,这里的一个棘手问题是,这在计算机中从未被识别过(仅限于人)。此外,这种情况通常是由于人的遗传,但是在迷幻药物使用后已有报道。虽然我永远不会建议使用非法药物,但我觉得滑倒你的CPU可能值得一试。
另一个困难是,联觉者之间没有共同点 - 也就是说,数字6对我来说与你的颜色不同。因此,这些可能会在您的计算机上呈现与我的不同。 (有点像“哇,伙计,我怎么知道那些颜色为”蓝色“对我来说不像我认为”红色“对你来说的东西?”但是,我们再次回到非法毒品。)
这就是我尝试将数字转换为颜色的方法。也就是说,除非您的数字实际上代表了一些有用的东西,比如ARGB颜色值。在这种情况下,您可以使用:
Color.FromArgb(numericValue);
答案 1 :(得分:9)
请改为尝试:
var argb = Convert.ToInt32(
((DataRowView)this.dataGridView1.Rows[e.RowIndex].DataBoundItem)["Color"]);
Color = Color.FromArgb(argb);
答案 2 :(得分:6)
嗯,你知道颜色首先变成了整数吗?我的猜测是它是由连接字节组成的ARGB值。
如果是这样,这是最简单的方法:
var myColor = Color.FromArgb(myColorInt);
将集成到您的实际代码行中,如:
var myColor = Color.FromArgb(Convert.ToInt32(((DataRowView)this.dataGridView1.Rows[e.RowIndex].DataBoundItem)["Color"]) }));
答案 3 :(得分:1)
Color myColor = Color.FromArgb(Convert.ToInt32(((DataRowView)
this.dataGridView1.Rows[e.RowIndex].DataBoundItem)["Color"])});
阅读上述评论之后,编辑:您可以稍微简化一切。尝试分配所选的颜色,如下所示:
((DataRowView)this.dataGridView1.Rows[e.RowIndex].DataBoundItem)["Color"] =
colorDialog.Color;
然后像这样读出来:
Color myColor =
((DataRowView)this.dataGridView1.Rows[e.RowIndex].DataBoundItem)["Color"];
这样您就可以将其保存为Color
并将其检索为Color
,并跳过中间转换步骤。
这可能会或可能不会与其他一些修改一起使用,具体取决于您的数据源是否会存储Color
而不是当前定义的int
。