Szukałem również odpowiedzi na to pytanie. W końcu napisałem ogólny sub, który można nazwać z dowolnego DataGridView, ponieważ miałem mnóstwo w moich aplikacjach i chciałem, aby wszyscy zachowywali się w ten sam sposób. To zadziałało dobrze, dlatego chciałem podzielić się nim z każdym, kto natknął się na ten post.
W przypadku kliknięcie myszką na DGV dodać kod
Private Sub SomeGrid_MouseClick(sender As Object, e As MouseEventArgs) Handles SomeGrid.MouseClick
DGV_MouseClick(sender, e)
End Sub
który wywołuje następujące sub że przechowywanie we wspólnym module
Public Sub DGV_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
Try
Dim dgv As DataGridView = sender
Dim h As DataGridView.HitTestInfo = dgv.HitTest(e.X, e.Y)
If h.RowIndex > -1 AndAlso h.ColumnIndex > -1 AndAlso dgv.Columns(h.ColumnIndex).CellType Is GetType(DataGridViewComboBoxCell) Then
Dim cell As DataGridViewComboBoxCell = dgv.Rows(h.RowIndex).Cells(h.ColumnIndex)
If Not dgv.CurrentCell Is cell Then dgv.CurrentCell = cell
If Not dgv.IsCurrentCellInEditMode Then
dgv.BeginEdit(True)
CType(dgv.EditingControl, ComboBox).DroppedDown = True
End If
End If
Catch ex As Exception
End Try
End Sub
nigdy złowionych żadnych błędów, tylko m.in. kod Try..Catch dla rzadkiej instancji, o której nie mogłem pomyśleć, może rzucić wyjątek. Nie chciałem, aby użytkownik niepokoił się komunikatami o błędach w tym scenariuszu. Jeśli jednostka podrzędna ulegnie awarii, najprawdopodobniej DGV będzie po prostu zachowywać się tak, jak to zwykle robi.
Cieszę się, ale to działa! – thismat
To było niezwykle pomocne. – BrianH