Когда я использую EditMode = EditOnEnter, ячейка вводит в editmode, когда я выбираю строку.
Пользователю трудно выбрать RowSelector для удаления строки.
Знаешь ли ты трюк?
Я пробую этот трюк:
Когда Cell Click:
Private Sub dgv2_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgv2.CellClick
If e.ColumnIndex = -1 Then
dgv2.EditMode = DataGridViewEditMode.EditOnKeystrokeOrF2
dgv2.EndEdit()
ElseIf dgv2.EditMode <> DataGridViewEditMode.EditOnEnter Then
dgv2.EditMode = DataGridViewEditMode.EditOnEnter
dgv2.BeginEdit(False)
End If
End Sub
Вы должны понимать, что ваша программа не может действительно читать мысли пользователя и понимать, когда вы входите в режим редактирования, но когда этого не делаете.
Пользователь может нажать клавишу Escape для отмены режима редактирования, после чего строка может быть удалена. Также вы можете выбрать другой DataGridViewEditMode (см. http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridvieweditmode.aspx), например DataGridViewEditMode.EditOnKeystroke или EditOnKeystrokeOrF2, которые оба хороши из точки юзабилити вид.
Вы можете изменить фокус на родительский элемент управления. Это заставит ячейку закончить редактирование без необходимости изменения самого режима.
Например, этот фрагмент оставит режим редактирования, если вы выберете более одной ячейки.
protected override void OnSelectionChanged(EventArgs e)
{
base.OnSelectionChanged(e);
if (SelectedCells.Count > 1)
{
// leave edit mode
Parent?.Focus();
}
}
Это действительно нужно сделать на MouseDown. Ячейки щелчка мыши на MouseUp:
Private Sub ProductsGrid_MouseDown(sender As Object, e As MouseEventArgs) Handles ProductsGrid.MouseDown
Dim grid = DirectCast(sender, DataGridView)
Dim info = grid.HitTest(e.X, e.Y)
If into.Type = DataGridViewHitTestType.RowHeader OrElse info.Type = DataGridViewHitTestType.TopLeftHeader Then
grid.EditMode = DataGridViewEditMode.EditOnKeystrokeOrF2
grid.EndEdit()
ElseIf grid.EditMode <> DataGridViewEditMode.EditOnEnter Then
grid.EditMode = DataGridViewEditMode.EditOnEnter
End If
End Sub
Необходимо выполнить еще многое, включая обработку поведения Tab Key. Такое поведение (и вышеупомянутая модификация), вероятно, лучше всего выполняется в пользовательском элементе управления, который наследует DataGridView.