更改DataGridViewButtonColumn单元格中按钮的Backcolor

时间:2015-01-20 14:52:48

标签: c# button datagridview windows-forms-designer

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

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

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

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

如何检索按钮? 或者在此链接中Change Color of Button in DataGridView Cell也存在类似的问题,但我无法覆盖Paint方法以更改按钮的背景颜色。我怎么解决这个问题? 谢谢

1 个答案:

答案 0 :(得分:2)

这是进行必要的手绘画的简化方法。它利用系统方法绘制Cell的背景,它将在Button和内容中闪现,即Button和它的Text。

诀窍是简单地用四个填充的矩形覆盖外面。

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)
    • 按钮颜色(黄色)
    • 单元格颜色(窗口)
  • 决定是否要在按钮周围绘制外边框
  • 确保所有像素都适合

我认为你的填充是对称的..

以下是它的样子:

enter image description here