DataGridView控件不会正确绘制单元格背景色

时间:2014-08-08 13:37:41

标签: c# winforms datagridview

我想在我的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中的颜色设置此属性时(这里双击显示),一切正常。

2 个答案:

答案 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));
}