从鼠标位置获取 DataGrid 单元格
Posted
技术标签:
【中文标题】从鼠标位置获取 DataGrid 单元格【英文标题】:Get DataGrid cell from mouse position 【发布时间】:2016-08-24 10:15:09 【问题描述】:我想在MouseDown
事件中获得DataGrid
的点击单元格。到目前为止,我还没有成功。
我试过了
dg.CurrentCell
- 包含上一个点击的单元格
dg.GetChildAt(...)
- 不起作用,因为单元格未列为 DataGrid 的子项
【问题讨论】:
您是否提出了问题并立即回答,来自msdn
网站的回答,以及简单的谷歌搜索上的十几个链接?
@Claudius 您是否注意到所有 google 搜索结果都引用 DataGridView 而不是 DataGrid?如果您将 -datagridview 添加到搜索中,则每个结果都是针对 WPF 等等...
但是如果两者都抓取相同的事件Mouse.MouseDown
有什么区别?
好吧,按钮和数据网格视图有什么区别?他们都有MouseDown
-event...DataGridView
比DataGrid
增强了很多,也许这也是为什么在论坛或 SO 上没有太多关于DataGrid
的帮助
@Claudius 我必须承认:当搜索标题并看到 DataGridView.HitTest
存在时,您可能会想到 DataGrid.HitTest
值得查找,但对于任何搜索标题的人来说-datagridview -wpf
(获取DataGrid
的结果)这个问题可能会有所帮助
【参考方案1】:
您可以使用HitTest
来获取鼠标所在的单元格。 (不依赖于MouseDown
-Event,只需要鼠标相对于DataGrid的位置)
示例:
Private Sub dg_MouseDown(sender As Object, e As MouseEventArgs) Handles dg.MouseDown
Dim htinfo As HitTestInfo = dg.HitTest(new Point(e.X, e.Y))
If htinfo.Type = HitTestType.Cell Then
Dim clickedCell As DataGridCell = dg.Item(htinfo.Row, htinfo.Column)
End If
End Sub
【讨论】:
不应将clickedCell
的类型设为DataGridViewCell
?
@CrazyIvan1974 不幸的是,我被绑定到了古老的DataGrid
WinForms 控件。如果它也适用于DataGridView
,我会很高兴
是的,哇,我错了。我看到 NOW 这个话题与DataGridView
无关。吹过了主要话题。这确实适用于DataGridView
。【参考方案2】:
Private Sub DataGridView1_MouseDown(sender As Object, e As MouseEventArgs) Handles DataGridView1.MouseDown
Try
With DataGridView1
.Rows(.HitTest(e.X, e.Y).RowIndex).Selected = True
End With
Catch
End Try
End Sub
【讨论】:
以上是关于从鼠标位置获取 DataGrid 单元格的主要内容,如果未能解决你的问题,请参考以下文章