2

我正在循环通过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

谢谢

4

3 回答 3

4

您不能使用Color.FromArgb,因为DataGridView不接受透明颜色。这可能是由于单元格和 DataGridView 不透明(默认情况下)造成的。您正在寻找的可能是这个;您可能希望设置BackColor为白色和绿色之间的颜色。

如果我弄错了,这不是您想要的,请解释您对单元格中 alpha 通道的需求。

于 2013-06-16T10:10:44.287 回答
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 属性不支持透明颜色,除非 System.Windows.Forms.ControlStyles 的 SupportsTransparentBackColor 值设置为 true。

BackColor 属性是环境属性。环境属性是控件属性,如果未设置,则从父控件中检索。例如,默认情况下,Button 将具有与其父 Form 相同的 BackColor。有关环境属性的更多信息,请参阅 AmbientProperties 类或 Control 类概述。

于 2013-06-16T10:25:14.623 回答
0

老问题,但我遇到了同样的问题。最简单的解决方案就是使用Color.FromArgb()从构造函数中排除 alpha 参数的覆盖。只要您不指定 alpha 透明度,颜色就可以完美地工作。

public static Color SeaFoamGreen = Color.FromArgb(20, 125, 115); 
于 2020-06-02T18:46:00.517 回答