Установить фон просмотра DataGrid для прозрачного
-
19-09-2019 - |
Вопрос
Я попытался установить цвет фона представления сетки данных для того, чтобы быть «прозрачным» из свойств, но в нем говорилось «не действительное свойство».
Как мне это сделать?
Решение
Я сделал это решение с конкретной проблемой (когда сетка содержалась в форме с фоновым изображением) с модификациями Simples, вы можете адаптировать ее для создания общей прозрачной сетки, просто спросите, есть ли у родителя фоновое изображение, иначе просто используйте родительскую бэккор. нарисовать свою сетку, и это все.
Вы должны унаследовать от 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;
}
}
Другие советы
Я сделал это с решением Deumber, и это работает, но вызывает некоторые проблемы, которых я избегал, добавив небольшие улучшения:
A. Прокрутка DGV испортит фон. Решение: поместите это где -нибудь:
public partial class main : Form
{
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000;
return cp;
}
}
}
Фон все еще будет прокручивать, но будет исправлен сразу после каждого шага прокрутки. Это заметно, но было приемлемо для меня. Кто -нибудь знает лучшее решение для поддержки прокрутки с этим?
Б. У дизайнера есть проблемы с использованием его. решение:
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. Это потерпит неудачу, если вы когда -нибудь захотите нарисовать DGV, пока у вас нет активной формы, но обычно это не так. Также можно просто сохранить линию IF, пока вы все равно захотите использовать дизайнера и удалить ее для выпуска.
Наличие прозрачного цвета в свойстве DataGridView FounalColor невозможно.
Поэтому я решил синхронизировать эту собственность с Backcolor. Старая старая функция DataBinding of Winforms очень хороша в этом:
myDataGridView.DataBindings.Add(nameof(DataGrid.BackgroundColor),
this,
nameof(Control.BackColor));
Сразу после InitializeComponents();
Я знаю, что это довольно старое, но это работает очень хорошо.
Установите Backcolor's Sackcolor's с цветом формы. Для этого выберите DataGridView: перейдите к свойствам -> Rowtemplate -> DefaultCellstyle -> Backcolor и выберите цвет вашей формы.
Вам нужно установить все строки и столбцы на прозрачные. Более простой способ:
for (int y = 0; y < gridName.Rows[x].Cells.Count; y++)
{
yourGridName.Rows[x].Cells[y].Style.BackColor =
System.Drawing.Color.Transparent;
}