我在循环播放一个 DataGridView
控件并动态添加行。我正在设置 BackColor
属性,基于以下逻辑。
if (bidVolume != null)
{
this.Rows[this.RowCount - 1].Cells[1].Style.BackColor = Color.Green;
}
else
{
this.Rows[this.RowCount - 1].Cells[1].Style.BackColor = Color.FromArgb(150, Color.Green);
}
这就造成了问题,颜色在视觉上没有被正确设置,而且当重新调整大小时 DataGridView
它看起来像这样。
当我不使用 Color.FromArgb
而只用 Color.Red
例如,然后一切正常工作。
是否可以设置一个单元格 BackColor
使用 Color.FromArgb
?
谢谢你
你不能使用 Color.FromArgb
因为 DataGridView
不接受透明色。这可能是由于单元格和DataGridView不是透明的(默认情况下)。你要找的可能是 这个;你可能想设置 BackColor
在白色和绿色之间着色。
如果我弄错了,这不是你想要的,请解释你对细胞中α通道的需求。
你得到了原因。为了克服这个问题,使用受保护的 SetStyle
方法来覆盖该行为。就像这样。
class MyDgv : DataGridView
{
public MyDgv()
{
this.SetStyle(ControlStyles.SupportsTransparentBackColor, true); //this is the key
//and now you can do what you want.
this.Rows[this.RowCount - 1].Cells[1].Style.BackColor = Color.FromArgb(150, Color.Green);
}
}
BackColor属性不支持透明色,除非System.Windows.Forms.ControlStyles的Supp SupportsTransparentBackColor值被设置为true。
BackColor属性是一个环境属性。环境属性是一个控件属性,如果没有设置,则会从父控件中获取。例如,一个Button在默认情况下将拥有与它的父控件Form相同的BackColor。有关环境属性的更多信息,请参见AmbientProperties类或Control类概述。
老问题,但我遇到了同样的问题。最简单的解决方案就是使用 Color.FromArgb()
覆盖,将alpha参数从构造函数中排除。只要你不指定alpha透明度,颜色就能完美地工作。
public static Color SeaFoamGreen = Color.FromArgb(20, 125, 115);