代码之家  ›  专栏  ›  技术社区  ›  ErocM

Datagridview-关注右键单击的单元格

  •  4
  • ErocM  · 技术社区  · 16 年前

    这是我设置要编辑的行的位置:

       Private Sub ModifyRowToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ModifyRowToolStripMenuItem.Click
        If Not datagridview_TagAssignment.CurrentRow Is Nothing Then
          datagridview_TagAssignment.CurrentCell = datagridview_TagAssignment.Item(0, datagridview_TagAssignment.CurrentRow.Index)
          datagridview_TagAssignment.BeginEdit(True)
        End If
      End Sub
    

     Private Sub datagridview_TagAssignment_CellMouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles datagridview_TagAssignment.CellMouseClick
        If e.Button = Windows.Forms.MouseButtons.Right AndAlso e.RowIndex >= 0 Then
          datagridview_TagAssignment.Rows(e.RowIndex).Selected = True
        End If
      End Sub
    

    有人有什么建议吗?

    1 回复  |  直到 14 年前
        1
  •  5
  •   msarchet    16 年前
    Private Sub DataGridView1_MouseClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles DataGridView1.MouseClick
        If e.Button = Windows.Forms.MouseButtons.Right Then
            rowClicked = DataGridView1.HitTest(e.Location.X, e.Location.Y).RowIndex
            ContextMenuStrip1.Items.Add(rowClicked.ToString)
            ContextMenuStrip1.Show(DataGridView1, e.Location)
            ContextMenuStrip1.Items.Clear()
        End If
    End Sub
    

    这将为您提供使用鼠标坐标右键单击的行的行索引。它应该允许您在知道索引的基础上删除行。

    编辑

    根据你的评论,这是我的代码

    Public Class Form1
    
        Dim bindS As New BindingSource
        Dim rowClicked As Integer
        Private Sub DataGridView1_MouseClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles DataGridView1.MouseClick
            If e.Button = Windows.Forms.MouseButtons.Right Then
                rowClicked = DataGridView1.HitTest(e.Location.X, e.Location.Y).RowIndex
                ContextMenuStrip1.Items.Add(rowClicked.ToString)
                ContextMenuStrip1.Show(DataGridView1, e.Location)
                ContextMenuStrip1.Items.Clear()
            End If
    
        End Sub
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim s As New List(Of String)
            s.Add("String one")
            s.Add("String Two")
            bindS.DataSource = s
            DataGridView1.DataSource = bindS
    
    
        End Sub
    End Class
    

    在行上单击鼠标右键可显示正确的行索引

    确保您正在处理的事件参数是 System.Windows.Forms.MouseEventArgs 我注意到你正在处理单元格点击