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(这里出现在双击)中的颜色设置这个属性时,一切都很好。
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));
}