14

我在 winform 上使用 vb.net 和 DataGridView。

当用户双击一行时,我想对这一行做一些事情。但是我怎么知道用户是点击了一行还是点击了网格中的任何地方?如果我使用DataGridView.CurrentRowthen 如果选择了一行并且用户单击了网格上的任何位置,则当前行将显示选定的而不是用户单击的位置(在这种情况下它不在一行上,我想忽略它)。

4

6 回答 6

34

试试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

只有当用户实际上是在网格中的一个单元格上时才会触发。检查过滤掉对行选择器和标题的If双击。

于 2010-10-13T04:51:16.860 回答
4

使用 Datagridview DoubleClick Evenet,然后使用 Datagrdiview1.selectedrows[0].cell["CellName"] 获取值和处理。

下面的示例显示了双击所选行时的客户记录。

私人无效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();

        }
    }
于 2013-05-07T07:09:42.187 回答
2

在双击处理程序中使用DataGridView.HitTest找出单击发生的位置。

于 2010-10-13T13:33:51.077 回答
0

我会使用DataGridView的DoubleClick事件。这至少只会在用户双击数据网格时触发 - 您可以使用 MousePosition 来确定用户双击的行(如果有)。

于 2010-10-13T04:31:12.083 回答
0

你可以试试这样的。

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。

于 2010-10-13T04:49:26.133 回答
0

你可以试试这个:

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
于 2012-03-16T11:56:37.060 回答