我在Winforms中使用DataGridView有这种情况。 我希望得到这样的东西,行之间有一些分离
图像和地址N39实际上是2列,没有水平边距,也没有列网格线,使它看起来像是一个整体。为了实现行之间的分离,我重写了CellPainting并使用Graphics.FillRectangle(高度小于单元格高度),Graphics.DrawLine到Graphics.DrawString和Graphics.DrawText来重绘整个网格以绘制单元格内容。
在第二个场景中,我将复选框作为其中一列。
如果我没有重新绘制,则单元格将触摸白色网格线,并且不会在行之间留下任何分隔。
但是如果我想覆盖CellPainting以创建一些像上面那样的分离,我可能需要重新绘制整个内容,但我不知道任何绘制和处理复选框的方法。 所以我想如果可能的话,我只想用一个带有背景颜色(浅灰色)的封闭矩形到单元格,并留下Winform的内容来处理。
我的问题是:
如何重新绘制部分细胞,例如绘制一个封闭的矩形,让Winforms的剩余单元格内容处理?
如果我们别无选择,只能重新绘制整个单元格,那么如何重新绘制并处理复选框列?
欢迎任何其他建议。
提前多多感谢。
最佳。
答案 0 :(得分:1)
在e
事件的普遍CellPainting
中,丰富的参数集中有两种方便的方法:
e.PaintContent
和e.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;
}