c#-在datagridview上绘制“依赖单元”的函数

我想在DataGridView中实现类似于MsExcel的“从属单元格”的功能,如下图所示.
最好的是某种绘画功能,它将目标地址和相关的datagridviewcell地址作为参数,并在datagridview上绘制箭头.
知道怎么做吗?

c#-在datagridview上绘制“依赖单元”的函数

解决方法:

您可以使用Paint事件进行绘制.

假设您已经收集了要连接到List< T>中的单元格:

List<Tuple<DataGridViewCell, DataGridViewCell>> DgvCells =
                             new List<Tuple<DataGridViewCell, DataGridViewCell>>();

现在,您可以对DGV的Paint事件进行编码以绘制图形,也许是这样的:

private void dataGridView1_Paint(object sender, PaintEventArgs e)
{
    e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
    foreach(var t in DgvCells)
    {
        if (!(t.Item1.Displayed && t.Item2.Displayed)) continue;
        Point p1 = GetCenter(dataGridView1.GetCellDisplayRectangle(
                                           t.Item1.ColumnIndex, t.Item1.RowIndex, true));
        Point p2 = GetCenter(dataGridView1.GetCellDisplayRectangle(
                                           t.Item2.ColumnIndex, t.Item2.RowIndex, true));
        using (Pen pen = new Pen(Color.Blue, 1) 
              { EndCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor })
            e.Graphics.DrawLine(pen, p1, p2);
    }
}

它使用了一个很小的辅助函数:

Point GetCenter(Rectangle r)
{ return new Point(r.X + r.Width / 2, r.Y + r.Height / 2); }

我已经在CellMouseClick事件中添加了代码以添加到列表中.结果看起来像这样:

c#-在datagridview上绘制“依赖单元”的函数

您可以添加代码以样式化绘图,例如添加StartCap或使用其他颜色等.

通常,无论何时从要连接的单元列表中添加或删除元素,都需要在DGV上调用Invalidate().

请注意,这只是一个最小的示例.您将需要添加代码来捕获各种错误,或者决定不显示其中一个单元格时该怎么做. (然后,我只是隐藏行了.)

srcolling时,您还必须使DGV失效!

上一篇:CodeGo.net>使用LINQ基于记录ID获取最大的DataGridViewRow


下一篇:首页> C#>如何防止每次点击回车键时突出显示datagridview的下一行?