vb.net - Datagridview - 专注于右键单击的单元格

标签 vb.net datagridview click edit

我有一个 datagridview,我已经把 ContextMenuStrip1 放在上面。当右键单击该行并单击“删除行”时,我希望它删除 datagridview 中的一行。我有删除工作并且显示菜单但是当您右键单击数据网格 View 时这不会触发。

这是我设置要编辑的行的地方:

   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

我总是在第(0)行结束,而不是我右键单击的行。
 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

有人有什么建议吗?

最佳答案

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

编辑:更新以处理上下文菜单条。

这应该为您提供使用鼠标坐标右键单击的行的行索引。这应该让您根据知道索引删除行。

编辑

根据您对它的评论不起作用,这是我的代码

我有一个带有 WinForm 的解决方案,其中添加了 dataGridView。这是表格中的代码。
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我注意到你正在处理单元格点击

关于vb.net - Datagridview - 专注于右键单击的单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2524221/

相关文章:

mysql - 如何将 system.byte 转换为 MySQL Bit 类型?

c - 允许在VB.net代码中调用C dll

VB.Net MessageBox.Show() 将我的表单移到后面

c# - 将 DataGridView 绑定(bind)到 List<>,某些属性不应显示

Android,向 TextView 添加不同数量的可点击跨度

vb.net - VB.NET中字符串中的字符替换

c# - DataGridView 选中行到DataTable

c# - DataGridView.AutoResizeColumns 忽略列标题高度

javascript - 如何点击具体坐标?

javascript - 我可以获得什么点击元素的数量