确定 DataGridView 中的单元格位置

Determine cell location in DataGridView

提问人:Maxim Gershkovich 提问时间:5/9/2011 最后编辑:Cody Gray - on strikeMaxim Gershkovich 更新时间:5/10/2011 访问量:32269

问:

给定特定的行号和列索引,如何计算 DataGridView 中的单元格位置 (IE: Location.Point)?

我需要单元格位置的原因是,我可以在单元格内放置一个按钮以允许文件夹浏览(datagridview 显示文件夹路径)。

关于如何实现此欢迎的替代建议。

C# .NET WinForms 数据绑定 DataGridView

评论

2赞 Cody Gray - on strike 5/9/2011
你在这里的想法是相当脆弱的。有更好的方法可以将按钮添加到 .单元格可以包含您喜欢的任何类型的控件,包括自定义控件。我建议先检查一下。DataGridView
0赞 Vale 5/9/2011
为什么不使用 DataGridViewButtonColumn?它是 .NET Framework 的一部分。
0赞 Maxim Gershkovich 5/9/2011
因为我想实现的是一个旁边有一个按钮的文本框(我确信有更好的方法,但不能完全解决 - 可能继承 DataGridViewColumn)。
1赞 Vale 5/9/2011
我会使用两列...我不明白为什么他们必须在同一个牢房里。

答:

46赞 Jay Riggs 5/10/2011 #1

您无法真正找到 DGV 单元的点,因为单元在 DGV 中占据了一个矩形区域。但是,可以使用 DataGridView.GetCellDisplayRectangle() 方法找到此区域。它返回 a 表示 DGV 单元格的显示区域,该显示区域由 Cell 的列和行索引给出。如果你真的想要一个点,你可以很容易地使用 来构造四个角中的任何一个的点。RectangleRectangleRectangle

// Get Rectangle for second column in second row.
var cellRectangle = dataGridView1.GetCellDisplayRectangle(1, 1, true);
// Can create Points using the Rectangle if you want.
Console.WriteLine("Top Left     x:{0}\t y:{1}", cellRectangle.Left, cellRectangle.Top);
Console.WriteLine("Bottom Right x:{0}\t y:{1}", cellRectangle.Right, cellRectangle.Bottom);

但我同意你问题的评论者;最好创建一个自定义 DataGridViewColumn 并将 TextBox 和 Button 托管在那里。下面是对 DateTimePicker 控件执行此操作的示例:

评论

0赞 Maxim Gershkovich 5/13/2011
我最终使用了您的建议来正确创建列。效果很好。谢谢!
0赞 Jack 5/27/2016
您提供的这个 MSDN 正是我要找的。