我有一个datagridview控件,我想在每个标题单元格的底部放置一条3px的行,看起来像
我已经将代码放在CellPainting中,甚至用于datagridview也是如此:
MyClassMappingAction
红线正确显示(我稍后会添加3px)。但是,标题文本现在丢失了。
我假设设置e.Handled = true;告诉不要继续绘制原始标题文本。如果将其设置为false,则红线消失。 (显然)此控件没有base.CellPainting类型的概念。
我知道我可以自己绘制文本,但随后我不得不担心对齐方式,字体...
现在是否有办法告诉系统同时执行这行操作并绘制原始标题文本?
如有必要,我愿意尝试其他方法。
答案 0 :(得分:0)
没有此控件的base.CellPainting类型概念
的确; DGV除了调用基本事件外还有更多选择。
相反,您可以让它按所需顺序分别绘制零件:
if (e.RowIndex < 0) // headers
{
e.PaintBackground(e.CellBounds, true); // draw the default background
Rectangle newRect =
new Rectangle(e.CellBounds.X, e.CellBounds.Bottom - 2, e.CellBounds.Width, 2);
e.Graphics.FillRectangle(Brushes.Red, newRect); // now draw the red line
e.PaintContent(e.CellBounds); // finally draw the text in the default way
e.Handled = true; // done
}
如果禁用 dgv.EnableHeadersVisualStyles
,您还可以设置在绘制列标题时要使用的许多其他属性。
对于更精细的选项,您可能需要研究MSDN。