无法在DataGridView单元格BackColor中使用Color.FromArgb

时间:2013-06-16 09:49:35

标签: c# winforms .net-4.0 datagridview colors

我循环遍历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的大小时,它看起来像这样:

enter image description here

当我不使用Color.FromArgb并仅使用Color.Red时,一切正常......

是否可以使用BackColor设置单元格Color.FromArgb

由于

3 个答案:

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

From documentation:

  

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);