我循环遍历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
?
由于
答案 0 :(得分:4)
您无法使用Color.FromArgb
,因为DataGridView
不接受透明色。这可能是由于单元格和DataGridView不透明(默认情况下)。你要找的是probalby this;您可能希望将BackColor
设置为白色和绿色之间的颜色。
如果我弄错了,这不是你想要的,请解释你对单元格中alpha通道的需求。
答案 1 :(得分:1)
你知道了。要解决此问题,请使用受保护的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属性不支持透明颜色,除非 SupportsTransparentBackColor值 System.Windows.Forms.ControlStyles设置为true。
BackColor属性是一个环境属性。环境属性是 控件属性,如果未设置,则从父级中检索 控制。例如,Button将具有与其相同的BackColor 父表单默认情况下。有关环境属性的更多信息, 请参阅AmbientProperties类或Control类概述。
答案 2 :(得分:0)
旧问题,但我遇到了同样的问题。最简单的解决方案是使用Color.FromArgb()
覆盖,该覆盖从构造函数中排除alpha参数。只要您不指定Alpha透明度,颜色就可以完美显示。
public static Color SeaFoamGreen = Color.FromArgb(20, 125, 115);