gpt4 book ai didi

c# - 如何处理 DataGridView 编辑控件的绘制?

转载 作者:太空狗 更新时间:2023-10-29 21:42:23 24 4
gpt4 key购买 nike

我有一个 DataGridView,我在 RowPostPaint 事件期间在每行的第一个单元格上绘制 TreeView 样式的虚线。当第一个单元格(DataGridViewTextBoxCell)处于编辑模式时,不会绘制线条。如何处理编辑控件的绘画?标准编辑控件没有 Paint 事件,如果可以避免,我不想创建新类型的单元格。

最佳答案

首先将第一列的单元格内边距设置为左起 16,因此在查看模式或编辑模式下,内容将使用给定的内边距显示。

this.dataGridView1.Columns[0].DefaultCellStyle.Padding= new Padding(16,0,0,0);

然后处理 CellPainting 事件并执行以下步骤:

  1. 只绘制第一列并且 RowIndex 应该 >=0 以避免渲染列标题
  2. 画树线或任何你想要的
  3. 使用 e.Handled = true 取消默认绘制

代码如下:

private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
//Only paint first column and RowIndex should be >=0 to avoid rendering column header
if (e.ColumnIndex == 0 && e.RowIndex >= 0)
{
//Paint your tree lines or whatever you want
using (var treePen = new Pen(Color.Gray, 1))
{
treePen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot;
e.Paint(e.CellBounds, DataGridViewPaintParts.All);
e.Graphics.DrawLine(treePen,
new Point(e.CellBounds.Left + 4, e.CellBounds.Top),
new Point(e.CellBounds.Left + 4, e.CellBounds.Bottom));

e.Graphics.DrawLine(treePen,
new Point(e.CellBounds.Left + 4, e.CellBounds.Top + e.CellBounds.Height / 2),
new Point(e.CellBounds.Left + 12, e.CellBounds.Top + e.CellBounds.Height / 2));
}

//Cancel default painting using e.Handled = true
e.Handled = true;
}
}

这是截图:

enter image description here

关于c# - 如何处理 DataGridView 编辑控件的绘制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1389451/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com