我想在我的DataGridView控件中设置几个单元格的背景颜色。 Backcolor在使用RowsAdded事件处理程序中的行填充控件时设置dynamicaly。这是代码
private void dataGridView_RowsAdded( object sender, DataGridViewRowsAddedEventArgs e )
{
if( dataGridView.Rows[e.RowIndex].Cells[2].Value as string == "Color" )
{
dataGridView.Rows[e.RowIndex].Cells[3].ReadOnly = true;
SetCellColor( dataGridView.Rows[e.RowIndex].Cells[3], dataGridView.Rows[e.RowIndex].Cells[3].Value.ToString() );
}
}
private void SetCellColor( DataGridViewCell cell, Color clr )
{
cell.Style.BackColor = clr;
cell.Style.SelectionBackColor = clr;
}
private void SetCellColor( DataGridViewCell cell, string HEXColorVal )
{
Int32 clrVal;
System.Globalization.CultureInfo provider = new System.Globalization.CultureInfo( "en-US" );
if( Int32.TryParse( HEXColorVal, System.Globalization.NumberStyles.HexNumber, provider, out clrVal ) )
{
Color clr = Color.FromArgb( clrVal );
SetCellColor( cell, clr );
}
}
这里在最后一列中存储了一个透明度= 0的颜色的srting表示。在运行时我可以看到,backgrounf属性设置为正确的值,但实际上背景是stil white,当我制作这个单元格时活跃的一切也变得白皙。这种行为的原因是什么?我尝试通过在cellFormating事件处理程序中设置此属性来修复它,但结果类似于waas。同时,当我使用ColorDialog中的颜色设置此属性时(这里双击显示),一切正常。
答案 0 :(得分:1)
Color.FromArgb
的格式要求提供ARGB值。 A是Alpha通道;这不是'透明度',而是'不透明度'。我的范围从0-255或00到FF,00是透明的,FF是完全不透明的。
如果输入字符串省略了4(!)字节中的第一个,结果仍然是透明的。
你应该确保Hex字符串有四个字节,并以'FF'开头!
或者你可以这样写,明确地分开组件:
Color.FromArgb(255, (clrVal >> 16) & 0xFF, (clrVal >> 8) & 0xFF, clrVal & 0xFF);
或者你可以写
Color.FromArgb(255, Color.FromArgb(clrVal) );
..默默地将Alpha通道纠正为完全不透明。
答案 1 :(得分:0)
似乎将颜色从十六进制转换为颜色类型时出现问题。如果值存储在#FFAABB
private void SetCellColor( DataGridViewCell cell, string HEXColorVal)
{
SetCellColor( cell, System.Drawing.ColorTranslator.FromHtml(HEXColorVal));
}