【问题标题】:Double-click DataGridView row?双击 DataGridView 行?
【发布时间】:2011-04-24 15:15:37
【问题描述】:

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

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

【问题讨论】:

    标签: vb.net winforms datagridview double-click


    【解决方案1】:

    你可以试试这个:

    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
    

    【讨论】:

      【解决方案2】:

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

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

      private void dgvClientsUsage_DoubleClick(object sender, 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();
      
              }
          }
      

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          试试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 检查过滤掉对行选择器和标题的双击。

          【讨论】:

          • 值得注意的是,如果你想在没有点击行的情况下运行某些东西,你可以使用e.RowIndex == -1
          【解决方案5】:

          你可以试试这样的。

          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。

          【讨论】:

            【解决方案6】:

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

            【讨论】:

            • 我正在使用 DataGridView 的 DoubleClick。但是如何使用鼠标位置来推断双击是否在实际行上?
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-03-09
            • 2016-05-02
            相关资源
            最近更新 更多