将datagrid视图背景设置为透明

时间:2009-08-25 18:47:31

标签: c# winforms datagridview transparency background-color

我尝试将数据网格视图的背景颜色设置为属性“透明”,但它表示“不是有效属性”。

我该怎么做?

5 个答案:

答案 0 :(得分:7)

我针对特定问题做了这个解决方案(当网格包含在带有背景图像的表格中时),通过简单的修改你可以调整它来创建一个通用的透明网格,只要询问父母是否有背景图像,否则只需使用父背景颜色绘制你的网格,就是这样。

您必须从DataGridView继承并覆盖PaintBackground方法,如下所示:

protected override void PaintBackground(Graphics graphics, Rectangle clipBounds,  Rectangle gridBounds)
  {
    base.PaintBackground(graphics, clipBounds, gridBounds);
    Rectangle rectSource = new Rectangle(this.Location.X, this.Location.Y, this.Width, this.Height);
    Rectangle rectDest = new Rectangle(0, 0, rectSource.Width, rectSource.Height);

    Bitmap b = new Bitmap(Parent.ClientRectangle.Width, Parent.ClientRectangle.Height);
    Graphics.FromImage(b).DrawImage(this.Parent.BackgroundImage, Parent.ClientRectangle);


    graphics.DrawImage(b, rectDest, rectSource, GraphicsUnit.Pixel);
    SetCellsTransparent();
  }


public void SetCellsTransparent()
{
    this.EnableHeadersVisualStyles = false;
    this.ColumnHeadersDefaultCellStyle.BackColor = Color.Transparent;
    this.RowHeadersDefaultCellStyle.BackColor = Color.Transparent;


    foreach (DataGridViewColumn col in this.Columns)
    {
        col.DefaultCellStyle.BackColor = Color.Transparent;
        col.DefaultCellStyle.SelectionBackColor = Color.Transparent;
    }
}

答案 1 :(得分:2)

我使用Deumber的解决方案做到了这一点并且有效,但是通过添加一些小的改进,我避免了一些麻烦:

一个。滚动DGV会使背景变得混乱。解决方案:把它放在某处:

public partial class main : Form
{ 
    protected override CreateParams CreateParams 
    {
    get
        {
        CreateParams cp = base.CreateParams;
        cp.ExStyle |= 0x02000000;
        return cp;
        }
    }
}

背景仍会滚动,但在每个滚动步骤后立即纠正。它很明显,但对我来说是可以接受的。有没有人知道更好的解决方案来支持滚动?

B中。设计师使用它有麻烦。溶液:

protected override void PaintBackground(Graphics graphics, Rectangle clipBounds, Rectangle gridBounds)
{
    base.PaintBackground(graphics, clipBounds, gridBounds);
    if (main.ActiveForm != null && this.Parent.BackgroundImage != null)
    {
        Rectangle rectSource = new Rectangle(this.Location.X, this.Location.Y, this.Width, this.Height);
        Rectangle rectDest = new Rectangle(-3, 3, rectSource.Width, rectSource.Height);
        Bitmap b = new Bitmap(Parent.ClientRectangle.Width, Parent.ClientRectangle.Height);
        Graphics.FromImage(b).DrawImage(this.Parent.BackgroundImage, Parent.ClientRectangle);
        graphics.DrawImage(b, rectDest, rectSource, GraphicsUnit.Pixel);
        SetCellsTransparent();
    }
}

现在设计师就像DGV一样对待它。如果您想要在没有ActiveForm的情况下绘制DGV,它将会失败,但通常情况并非如此。当你可能仍然想要使用设计器时,也可以保留if-line,并在发布时删除它。

答案 2 :(得分:0)

无法在DataGridView BackGroundColor属性中使用透明颜色。

所以我决定将这个属性与父级的BackColor同步。 WinForms良好的旧数据绑定功能非常擅长:

myDataGridView.DataBindings.Add(nameof(DataGrid.BackgroundColor), 
                                this, 
                                nameof(Control.BackColor));

InitializeComponents();

之后

我知道这很老了,但效果很好。

答案 3 :(得分:-1)

将datagridview的backcolor设置为与表单颜色相同。为此,请选择datagridview:转到属性 - > RowTemplate - > DefaultCellStyle - > BackColor并选择表单的颜色。

答案 4 :(得分:-2)

您需要将所有行和列设置为透明。更简单的方法是:

for (int y = 0; y < gridName.Rows[x].Cells.Count; y++)
{
     yourGridName.Rows[x].Cells[y].Style.BackColor =
     System.Drawing.Color.Transparent;
}