更改 DataGridViewButtonColumn 单元格中按钮的背景颜色

Change Backcolor of a button in a cell of a DataGridViewButtonColumn

我有一个包含 DataGridViewButtonColumn 的 DataGridView。 我想更改此列内按钮的颜色。我已经在单元格内设置了按钮的填充,这样按钮就不会填满单元格。 如果我使用此代码:

newRow.Cells["Name"].Style.BackColor = Color.Yellow;

我知道按钮和单元格都是黄色的。 我只想要黄色按钮。 我在网上发现要更改按钮的颜色,我应该更改按钮的 Backcolor。 我无法从网格中检索按钮。我以这种方式检索了单元格:

DataGridViewCell dataGridViewCell = newRow.Cells["Name"];
DataGridViewButtonCell dataGridViewButtonCell = dataGridViewCell as DataGridViewButtonCell;

我该如何找回按钮? 或者在此 link Change Color of Button in DataGridView Cell 中有一个类似的问题,但我无法覆盖 Paint 方法以更改按钮的背景色。我怎么解决这个问题? 谢谢

这是进行必要的单元格绘制的简化方法。它利用系统方法绘制 Cell 的背景,这将在 Button 和内容中发光,即 Button 及其文本。

诀窍是用四个填充的矩形简单地过度绘制外部。

private void dataGridView1_CellPainting(object sender, 
                                        DataGridViewCellPaintingEventArgs e)
{
   if (e.CellStyle.BackColor == Color.Yellow)
   {
        int pl = 12;  //  padding left & right
        int pt = 2;   // padding top & bottom
        int cw = e.CellBounds.Width;
        int ch = e.CellBounds.Height;
        int x = e.CellBounds.X;
        int y = e.CellBounds.Y;

        e.PaintBackground(e.ClipBounds, true);
        e.PaintContent(e.CellBounds);

        Brush brush = SystemBrushes.Window;
        e.Graphics.FillRectangle(brush, x, y, pl + 1 , ch - 1);
        e.Graphics.FillRectangle(brush, x + cw - pl - 2, y, pl + 1, ch - 1);
        e.Graphics.FillRectangle(brush, x, y, cw -1 , pt + 1 );
        e.Graphics.FillRectangle(brush, x, y + ch - pt - 2 , cw -1 , pt + 1 );

        e.Handled = true;
    }
}

你会想要:

  • 使用常见的引用来:
    • 填充 (12,2,12,2)
    • 按钮颜色(黄色)
    • 单元格颜色 (window)
  • 决定是否要在按钮周围绘制外边框
  • 确保所有像素适合

我假设你的填充是对称的..

这里是这样的: