在Windows窗体中将int转换为Color

时间:2011-06-13 19:43:31

标签: c# colors casting

我的行中的值等于-16777056,但如何将其强制转换为Color?

类似的东西:

Color = (Color) Convert.ToInt32(((DataRowView)this.dataGridView1.Rows[e.RowIndex].DataBoundItem)["Color"]) })

4 个答案:

答案 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