Дважды щелкните строку DataGridView?

Я использую vb.net и DataGridView на winform.

когда пользователь дважды щелкает по строке, я хочу что-то сделать с этой строкой. Но как я могу узнать, нажал ли пользователь на строку или просто в любом месте сетки? Если я использую DataGridView.CurrentRow затем, если выбрана строка и пользователь нажал в любом месте сетки текущая строка покажет выбранную, а не где пользователь нажал (который в этом случае не будет в строке, и я хотел бы игнорировать его).

6 ответов


попробовать CellMouseDoubleClick событие...

Private Sub DataGridView1_CellMouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DataGridView1.CellMouseDoubleClick
    If e.RowIndex >= 0 AndAlso e.ColumnIndex >= 0 Then
        Dim selectedRow = DataGridView1.Rows(e.RowIndex)
    End If
End Sub

это будет срабатывать, только если пользователь фактически находится над ячейкой в сетке. The If проверьте фильтры дважды щелкните по селекторам строк и заголовкам.


используйте Datagridview DoubleClick Evenet, а затем Datagrdiview1.selectedrows[0].ячейка ["CellName"] для получения значения и процесса.

ниже пример показывает запись клиентов при двойном щелчке по выбранной строке.

private void dgvClientsUsage_DoubleClick (отправитель объекта, EventArgs e) {

        if (dgvClientsUsage.SelectedRows.Count < 1)
        {
            MessageBox.Show("Please select a client");
            return;
        }

        else
        {
            string clientName = dgvClientsUsage.SelectedRows[0].Cells["ClientName"].Value.ToString();

            // show selected client Details
            ClientDetails clients = new ClientDetails(clientName);
            clients.ShowDialog();

        }
    }

использовать DataGridView.HitTest в обработчике двойного щелчка, чтобы узнать, где произошел щелчок.


Я бы использовал DoubleClick событие DataGridView. Это будет срабатывать, по крайней мере, только когда пользователь дважды щелкает в сетке данных - вы можете использовать MousePosition, чтобы определить, какую строку (если таковая имеется) пользователь дважды щелкнул.


вы можете попробовать что-то вроде этого.

Private Sub DataGridView1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGridView1.DoubleClick
    For index As Integer = 0 To DataGridView1.Rows.Count
        If DataGridView1.Rows(index).Selected = True Then
            'it is selected
        Else
            'is is not selected
        End If
    Next
End Sub

имейте в виду, что я не мог проверить это, потому что у меня не было данных для заполнения моего DataGridView.


вы можете попробовать это:

Private Sub grdview_CellDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles grdview.CellDoubleClick

    For index As Integer = 0 To grdview.Rows.Count - 1

        If e.RowIndex = index AndAlso e.ColumnIndex = 1 AndAlso grdview.Rows(index).Cells(1).Value = "" Then

            MsgBox("Double Click Message")

        End If
    Next
End Sub