datagridviewcontrol没有正确绘制单元格背景色

本文关键字:绘制 单元格 背景色 datagridviewcontrol | 更新日期: 2023-09-27 18:17:03

我想在DataGridView控件中设置几个单元格的背景色。在RowsAdded事件处理程序中使用行填充控件时动态设置Backcolor。下面是代码

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的颜色的初始表示形式。在运行时,我可以看到,背景属性被设置为正确的值,但实际上背景仍然是白色的,当我使这个单元格活跃时,一切也都变成白色。这种行为的原因是什么?我试图通过在cellformatting事件处理程序中设置此属性来修复它,但结果是相似的。同时,当我使用ColorDialog(这里出现在双击)中的颜色设置这个属性时,一切都很好。

datagridviewcontrol没有正确绘制单元格背景色

Color.FromArgb的格式要求提供ARGB值。A是Alpha通道;这不是"透明度",而是"不透明度"。I的取值范围为0 ~ 255或00 ~ FF,其中00为透明,FF为固体不透明。

如果你的输入字符串省略了第一个(!)字节,结果仍然是透明的。

你应该确保十六进制字符串有所有四个字节,并以' ff '开头!

或者你可以这样写,显式地分离组件:

 Color.FromArgb(255, (clrVal >> 16) & 0xFF, (clrVal >> 8) & 0xFF, clrVal & 0xFF);

或者你可以写

 Color.FromArgb(255,  Color.FromArgb(clrVal) );

. .

在将颜色从十六进制转换为颜色类型时似乎存在问题。如果值存储在像#FFAABB

这样的网格中,就简单一点
private void SetCellColor( DataGridViewCell cell, string HEXColorVal)
{
  SetCellColor( cell, System.Drawing.ColorTranslator.FromHtml(HEXColorVal));
}