Frage

Ich habe versucht, die Hintergrundfarbe einer Datengitteransicht als "transparent" von Eigenschaften festzulegen, aber es heißt "keine gültige Eigenschaft".

Wie kann ich es tun?

War es hilfreich?

Lösung

Ich habe diese Lösung für ein bestimmtes Problem gemacht (als das Raster in einem Formular mit Hintergrundbild enthalten war) mit Simples -Modifikationen können Sie es anpassen, um ein generisches transparentes Raster zu erstellen. Fragen Sie einfach, ob das übergeordnete Hintergrundbild hat. Um Ihr Netz zu malen, und das ist alles.

Sie müssen die DataGridView erben und die Pinktorground -Methode wie folgt überschreiben:

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

Andere Tipps

Ich habe dies mit der Lösung von Deucht gemacht und es funktioniert, verursacht aber einige Probleme, die ich durch Hinzufügen kleiner Verbesserungen vermieden habe:

A. Scrollen des DGV durcheinander bringen den Hintergrund. Lösung: Setzen Sie das an einen Ort:

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

Der Hintergrund wird weiterhin scrollen, aber unmittelbar nach jedem Scroll -Schritt korrigiert. Es ist spürbar, war aber für mich akzeptabel. Kennt jemand eine bessere Lösung, um das Scrollen damit zu unterstützen?

B. Der Designer hat Probleme, es zu verwenden. Lösung:

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

Jetzt behandelt der Designer es wie ein DGV. Es wird scheitern, wenn Sie jemals das DGV zeichnen möchten, während Sie keine aktive Form haben, aber das ist normalerweise nicht der Fall. Es ist auch möglich, die IF-Linie zu behalten, während Sie den Designer noch verwenden möchten, und sie für die Veröffentlichung löschen möchten.

Es ist nicht möglich, eine transparente Farbe in der DataGridView -Hintergrund -Color -Eigenschaft zu haben.

Also habe ich mich entschlossen, diese Eigenschaft mit dem Backcolor des Elternteils zu synchronisieren. Die gute alte Datenbindungsfunktion von WinForms ist sehr gut darin:

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

Kurz nachdem InitializeComponents();

Ich weiß, das ist ziemlich alt, aber das funktioniert sehr gut.

Setzen Sie das BackColor von DataGridView mit der Farbe des Formulars. Wählen Sie dazu DataGridView: Gehen Sie zu den Eigenschaften -> RowTemplate -> defaultCellStyle -> BackColor und wählen Sie die Farbe Ihres Formulars.

Sie müssen alle Zeilen und Spalten auf transparent einstellen. Einfacherer Weg ist:

for (int y = 0; y < gridName.Rows[x].Cells.Count; y++)
{
     yourGridName.Rows[x].Cells[y].Style.BackColor =
     System.Drawing.Color.Transparent;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top