winform で vb.net と DataGridView を使用しています。
ユーザーが行をダブルクリックすると、この行で何かしたいと思います。しかし、ユーザーが行をクリックしたのか、グリッド内のどこかをクリックしたのかを知るにはどうすればよいでしょうか? 行が選択されていて、ユーザーがグリッドのどこかをDataGridView.CurrentRowクリックすると、現在の行には選択された行が表示され、ユーザーがクリックした場所は表示されません (この場合は行にないため、無視します)。
winform で vb.net と DataGridView を使用しています。
ユーザーが行をダブルクリックすると、この行で何かしたいと思います。しかし、ユーザーが行をクリックしたのか、グリッド内のどこかをクリックしたのかを知るにはどうすればよいでしょうか? 行が選択されていて、ユーザーがグリッドのどこかをDataGridView.CurrentRowクリックすると、現在の行には選択された行が表示され、ユーザーがクリックした場所は表示されません (この場合は行にないため、無視します)。
イベントを試してみてください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チェックは、行セレクターとヘッダーのダブルクリックを除外します。
Datagridview DoubleClick Evenet を使用してから、Datagrdiview1.selectedrows[0].cell["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を使用して、クリックが発生した場所を調べます。
これを試すことができます:
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
DataGridViewのDoubleClickイベントを使用します。これは、少なくともユーザーがデータ グリッドでダブルクリックしたときにのみ発生します。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 に入力するデータがなかったため、これをテストできなかったことを覚えておいてください。