Member 12586674 Ответов: 1

Цвет фона приложения Windows forms datagridview


Привет,

У меня есть DataGridView в приложении WinForms на моей форме. Форма имеет фоновое изображение.
Я тоже хочу сделать свою сетку прозрачной. Но он не работает, просто изменяя свойство BackgroundColor.

Что я уже пробовал:

Я попробовал ниже код, но выдает мне ошибку, что " нет подходящего метода для переопределения"
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;
            }
        }

Кто-нибудь может помочь?

Спасибо.

Maciej Los

Вы пытались отладить свою программу, чтобы выяснить, где происходит ошибка?

Member 12586674

Нет.Это ошибка времени компиляции.Я не умею отлаживать.

1 Ответов

Рейтинг:
0

OriginalGriff

Цитата:
не нашли подходящий метод для переопределения
Означает именно то, что он говорит: в Базовом элементе управления нет метода с таким именем, который вы могли бы переопределить.

Существует DataGridView.Метод PaintBackground: Практическое руководство.Метод PaintBackground (Графика, Прямоугольник, Прямоугольник) (System.Окна.Формы)[^] но если вы не производите свой элемент управления от DataGridView, вы не можете переопределить его - вы не можете переопределить встроенный метод управления в вашем коде формы, только в коде для элемента управления, который является производным от DataGridView.


Member 12586674

Да моя сетка получена из

System.Windows.Forms.DataGridView

И я вижу метод "Paint", но не " PaintBackground"

OriginalGriff

Как вы его получили? Что такое определение заголовка класса?

Member 12586674

Я тебя не понял. Что вы подразумеваете под информацией заголовка?

OriginalGriff

общественного класса MyClass : ...

Member 12586674

Класс DataGridView-это
открытый класс DataGridView : Control, ISupportInitialize
{}

OriginalGriff

Да...Я знаю.
Это означает, что для того, чтобы переопределить методы в классе DataGridView, вы должны создать свой собственный элемент управления, производный от DataGridView:

общественные MyDataGridView : практическое руководство
{
...

Вы это сделали?

Member 12586674

Нет, этого я не делал.Не могли бы вы подсказать мне, как именно это делается?

OriginalGriff

https://msdn.microsoft.com/en-us/library/7h62478z(v=против 110). aspx

Member 12586674

Я добавил CustomControl и удалил стили ячеек сетки из файла Form.Designer.cs, но все еще не смог получить прозрачный фон.
То, что я получаю, это 1-й два ряда сетки прозрачны, но строка заголовка и все строки после 2-го ряда не прозрачны