Cellpainting复选框或绘制单元格的一部分

时间:2014-10-08 09:08:54

标签: c# winforms checkbox datagridview repaint

我在Winforms中使用DataGridView有这种情况。 我希望得到这样的东西,行之间有一些分离

Grid with image and text

图像和地址N39实际上是2列,没有水平边距,也没有列网格线,使它看起来像是一个整体。为了实现行之间的分离,我重写了CellPainting并使用Graphics.FillRectangle(高度小于单元格高度),Graphics.DrawLine到Graphics.DrawString和Graphics.DrawText来重绘整个网格以绘制单元格内容。

在第二个场景中,我将复选框作为其中一列。

Grid with checkbox column

如果我没有重新绘制,则单元格将触摸白色网格线,并且不会在行之间留下任何分隔。

但是如果我想覆盖CellPainting以创建一些像上面那样的分离,我可能需要重新绘制整个内容,但我不知道任何绘制和处理复选框的方法。 所以我想如果可能的话,我只想用一个带有背景颜色(浅灰色)的封闭矩形到单元格,并留下Winform的内容来处理。

我的问题是:

  1. 如何重新绘制部分细胞,例如绘制一个封闭的矩形,让Winforms的剩余单元格内容处理?

  2. 如果我们别无选择,只能重新绘制整个单元格,那么如何重新绘制并处理复选框列?

  3. 欢迎任何其他建议。

  4. 提前多多感谢。

    最佳。

1 个答案:

答案 0 :(得分:1)

e事件的普遍CellPainting中,丰富的参数集中有两种方便的方法:

如果您只想更改部分外观,

e.PaintContente.PaintBackground可以完成所有工作:

if (e.ColumnIndex == yourColumnIndex)
{
    // do your special stuff..
    e.Graphics.FillRectangle(Brushes.Wheat, e.CellBounds);
    // ..
    // now get the regular content drawn by the system
    e.PaintContent(e.CellBounds);  
    // and quit
    e.Handled = true;
}