不能在DataGridView单元格中使用Color.FromArgb BackColor

问题描述 投票:2回答:3

我在循环播放一个 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 ?

谢谢你

c# winforms .net-4.0 datagridview colors
3个回答
4
投票

你不能使用 Color.FromArgb因为 DataGridView 不接受透明色。这可能是由于单元格和DataGridView不是透明的(默认情况下)。你要找的可能是 这个;你可能想设置 BackColor 在白色和绿色之间着色。

如果我弄错了,这不是你想要的,请解释你对细胞中α通道的需求。


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的Supp SupportsTransparentBackColor值被设置为true。

BackColor属性是一个环境属性。环境属性是一个控件属性,如果没有设置,则会从父控件中获取。例如,一个Button在默认情况下将拥有与它的父控件Form相同的BackColor。有关环境属性的更多信息,请参见AmbientProperties类或Control类概述。


0
投票

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

public static Color SeaFoamGreen = Color.FromArgb(20, 125, 115); 
© www.soinside.com 2019 - 2024. All rights reserved.