Pregunta

Traté de establecer el color de fondo de una vista de cuadrícula de datos para ser "transparente" de las propiedades, pero dijo "no una propiedad válida".

¿Cómo puedo hacerlo?

¿Fue útil?

Solución

Hice esta solución a un problema específico (cuando la cuadrícula estaba contenida en una forma con imagen de fondo) con modificaciones simples, puede adaptarlo para crear una cuadrícula transparente genérica, solo pregunte si los padres tienen una imagen de fondo, de lo contrario, solo use la backcolor de los padres Para pintar su cuadrícula, y eso es todo.

Debe heredar desde DataGridView y anular el método de Paintbackground como este:

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

Otros consejos

Hice esto con la solución de Deumber y funciona, pero causa algunos problemas que evité al agregar pequeñas mejoras:

A. desplazando el DGV arruina el fondo. Solución: Pon esto en algún lugar:

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

El fondo aún se desplazará, pero se corregirá inmediatamente después de cada paso de desplazamiento. Es notable, pero fue aceptable para mí. ¿Alguien sabe una mejor solución para admitir el desplazamiento con esto?

B. El diseñador tiene problemas para usarlo. solución:

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

Ahora el diseñador lo trata como un DGV. Fallará si alguna vez desea dibujar el DGV mientras no tiene forma activa, pero ese no es el caso generalmente. También es posible mantener la línea IF mientras aún puede usar el diseñador y eliminarlo para el lanzamiento.

No es posible tener un color transparente en la propiedad DataGridView BackgroundColor.

Así que decidí sincronizar esta propiedad con la backcolor de los padres. La buena característica de databinding de WinForms es muy buena en esto:

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

Justo después de InitializeComponents();

Sé que esto es bastante viejo, pero esto funciona muy bien.

Establezca la backcolor de DataGridview lo mismo con el color del formulario. Para hacer esto, seleccione DataGridView: vaya a Propiedades -> RowTemplate -> DefaultcellStyle -> BackColor y elija el color de su formulario.

Debe configurar todas las filas y columnas en transparente. La forma más fácil es:

for (int y = 0; y < gridName.Rows[x].Cells.Count; y++)
{
     yourGridName.Rows[x].Cells[y].Style.BackColor =
     System.Drawing.Color.Transparent;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top