【问题标题】:Datagridview - Focus on Cell that was right clickedDatagridview - 专注于右键单击的单元格
【发布时间】:2012-06-26 16:16:10
【问题描述】:

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

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

   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

有人有什么建议吗?

【问题讨论】:

    标签: vb.net datagridview click edit


    【解决方案1】:
    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
    

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

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

    编辑

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

    我有一个带有添加了 dataGridView 的 WinForm 的解决方案。这是表单中的代码。

    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 我注意到您正在处理单元格点击

    【讨论】:

    • 我添加了这个并在这一行上进行了调试,当我右键单击 datagridview 时它并没有停止。这确实是我从一开始就存在的问题。我是否没有正确设置右键单击以在鼠标单击上工作?
    • 好的,我找到了它没有捕捉到右键单击的原因。如果我从 datagridview 中删除“ContextMenuStrip1”,现在可以看到右键单击并且您的代码可以正常工作。有什么建议可以解决这个问题吗?
    • 是的,我编辑了代码,这样您就可以看到如何显示上下文菜单但仍然获得行索引。在我使用的 contextmenustrip 中,我将项目显示为右键单击的行。现在右击focused行不会改变,但是点击的行索引是正确的。
    猜你喜欢
    • 2013-06-18
    • 2013-05-18
    • 1970-01-01
    • 2014-02-09
    • 1970-01-01
    • 1970-01-01
    • 2015-08-03
    • 1970-01-01
    • 2010-12-15
    相关资源
    最近更新 更多