从鼠标位置获取DataGrid单元格

7

我希望在MouseDown事件中获取DataGrid的单元格点击信息,但目前尝试都没有成功。
我尝试了以下方法:

  • dg.CurrentCell - 包含之前点击的单元格信息

  • dg.GetChildAt(...) - 无法工作,因为单元格不是DataGrid的子元素


你是不是问了一个问题,然后立刻用msdn网站上的答案和几个简单的谷歌搜索链接回答了它? - Claudius
1
@Claudius,你有没有注意到所有的谷歌搜索结果都是关于DataGridView而不是DataGrid?如果你在搜索中加上-datagridview,每个结果都是关于WPF等等... - Breeze
但是如果两者都捕获相同的事件 Mouse.MouseDown,有什么区别呢? - Claudius
那么,按钮和DataGridView之间有什么区别呢?它们都有MouseDown事件... DataGridView比DataGrid更加强大,也许这就是为什么在论坛或SO上没有太多关于DataGrid的帮助的原因。 - Breeze
@Claudius 我必须承认:当搜索标题并看到存在 DataGridView.HitTest 时,你可能会想到值得查找 DataGrid.HitTest,但对于任何搜索标题加上 -datagridview -wpf(以获取 DataGrid 的结果)的人来说,这个问题可能会有所帮助。 - Breeze
2个回答

7
你可以使用HitTest来获取鼠标所在的单元格(不依赖于MouseDown事件,只需相对于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
@CrazyIvan1974,很不幸我被绑定在古老的DataGrid WinForms控件上。如果它也适用于DataGridView,我会很高兴的。 - Breeze
是的,哇,我的错。我现在才看到这个主题不是关于“DataGridView”的。完全忽略了主要话题。这确实可以与“DataGridView”一起使用。 - CrazyIvan1974

1
   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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接