Datagridview - Сосредоточьтесь на ячейке, которая была нажата правой кнопкой мыши - PullRequest
4 голосов
/ 26 марта 2010

У меня есть представление данных, в которое я поместил ContextMenuStrip1. Я хотел бы, чтобы он удалял строку в сетке данных, если щелкнуть правой кнопкой мыши по строке и нажать «Удалить строку». У меня работает удаление, и отображается меню, но оно не запускается, когда вы щелкаете правой кнопкой мыши по представлению сетки данных.

Здесь я устанавливаю строку для редактирования:

   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

У кого-нибудь есть предложения?

1 Ответ

5 голосов
/ 26 марта 2010
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 Я заметил, что вы обрабатываете щелчок ячейки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...