There was a problem when scrolling or resizing a table with drawing forms, that is, everything merges, how to solve the problem.
Code example
private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) { if (e.RowIndex == -1 && e.ColumnIndex != -1) { //e.Graphics.FillRectangle(Brushes.Blue, e.CellBounds); //e.Paint(e.ClipBounds, (DataGridViewPaintParts.All & ~DataGridViewPaintParts.Background)); //e.Handled = true; System.Drawing.Rectangle HeaderArea = dataGridView1.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, true); //HeaderArea = tabControl1.GetTabRect(e.RowIndex); SolidBrush fillbrush = new SolidBrush(Color.Red); System.Drawing.Rectangle buttonFilter = new System.Drawing.Rectangle(); buttonFilter.Location = new System.Drawing.Point(HeaderArea.Left, 0); buttonFilter.Size = new Size(16, 16); e.Graphics.FillRectangle(fillbrush, buttonFilter); StringFormat FormatName = new StringFormat(); FormatName.Alignment = StringAlignment.Center; FormatName.LineAlignment = StringAlignment.Center; HeaderArea.X = HeaderArea.X + 16; e.Graphics.DrawString(dataGridView1.Columns[e.ColumnIndex].Name, this.dataGridView1.ColumnHeadersDefaultCellStyle.Font, new SolidBrush(this.dataGridView1.ColumnHeadersDefaultCellStyle.ForeColor), HeaderArea, FormatName); e.Handled = true; } } private void dataGridView1_Scroll(object sender, ScrollEventArgs e) { /*System.Drawing.Rectangle rtHeader = dataGridView1.DisplayRectangle; rtHeader.Height = dataGridView1.ColumnHeadersHeight / 2; dataGridView1.Invalidate(rtHeader);*/ for (int i = 0; i < dataGridView1.Columns.Count; i++) { this.dataGridView1.InvalidateCell(i,0); } } 