DataGridView中单元格的起始位置是什么

时间:2014-02-26 11:12:08

标签: vb.net winforms datagridview

我在DataGridView中有10列。

如果我点击第一个单元格,弹出窗口的起始位置应该靠近第一个单元格 如果我点击第二个单元格,弹出窗口的起始位置应该靠近第二个单元格 如果我点击第三个单元格,弹出窗口的起始位置应该靠近第三个单元格。

如何相应地更改RowIndexColumnIndex

Datagridview_CellClick

中使用以下代码
sub
 mPopup.Show(datagridview.PointToScreen(New Point(e.RowIndex , e.ColumnIndex )))
end sub

2 个答案:

答案 0 :(得分:0)

由于这是.NET,所有索引都从0开始。 e.RowIndex和e.ColumnIndex的值范围仅为0-2。 我想你的结果是你选择的点最终位于左上角。

您需要先计算实际单元格的位置,然后将该值应用于New Point方法。

这篇文章有一个很好的例子 Current Selected Cell Position

根据该帖子,您只需要致电

    Dim rect as Rectangle = DataGridView.GetCellDisplayRectangle(e.RowIndex, e.ColumnIndex)
    Dim left as int = rect.Left
    Dim top as int = rect.Top

获取正确的Point值。 然后将其传递回

    datagridview.PointToScreen(New Point(top,left))

请务必检查我的语法,自从我写VB以来已经有一段时间了。

答案 1 :(得分:0)

您需要将所有位置偏移相加以获得正确的点。

此代码显示单击的单元格右下角的上下文菜单:

Private Sub DataGridView1_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellClick
    Dim rect As Rectangle = DataGridView1.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, False)
    Dim formBorderWidth As Integer = CInt((Me.Width - Me.ClientSize.Width) / 2)
    Dim formTitlebarHeight As Integer = Me.Height - Me.ClientSize.Height - 2 * formBorderWidth
    Dim left As Integer = Me.Left + formBorderWidth + DataGridView1.Left + rect.Left + rect.Width
    Dim top As Integer = Me.Top + formTitlebarHeight + formBorderWidth + DataGridView1.Top + rect.Top + rect.Height
    Dim pt As New Point(left, top)
    ContextMenuStrip1.Show(pt)
End Sub

我觉得可能有一种更简单的方法可以做到这一点,但现在可以使用。