DataGridView.Editmode = EditOnEnter. Как выбрать строку, чтобы удалить ее? - PullRequest
5 голосов
/ 08 июля 2010

Когда я использую EditMode = EditOnEnter, ячейка входит в режим редактирования, когда я выбираю строку.

Пользователю трудно выбрать RowSelector для удаления строки.

ты знаешь какой-нибудь трюк?

Ответы [ 4 ]

7 голосов
/ 09 июля 2010

Я попробую этот трюк:

Когда щелчок ячейки:

  • , если index = -1 EndEdit и EditMode = DataGridViewEditMode.EditOnKeystrokeOrF2
  • Иначе, если EditOnKeystrokeOrF2 - восстановитьEditMode и BeginEdit

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
1 голос
/ 09 июля 2010

Вы должны понимать, что ваша программа не может действительно читать мысли пользователя и понимать, когда входит в режим редактирования, но когда этого не происходит.

Пользователь может нажать клавишу Escape, чтобы отменить режим редактирования, затем строку можно удалить.Также вы можете выбрать другой DataGridViewEditMode (см. http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridvieweditmode.aspx), например DataGridViewEditMode.EditOnKeystroke или EditOnKeystrokeOrF2, которые оба хороши с точки зрения удобства использования.

0 голосов
/ 20 мая 2016

Вы можете изменить фокус на родительский элемент управления. Это заставит ячейку завершить редактирование без необходимости изменения самого режима.

Например, этот фрагмент выйдет из режима редактирования, если вы выберете более одной ячейки.

protected override void OnSelectionChanged(EventArgs e)
{
    base.OnSelectionChanged(e);

    if (SelectedCells.Count > 1)
    {
        // leave edit mode
        Parent?.Focus();
    }
}
0 голосов
/ 08 июня 2015

Это действительно нужно сделать на MouseDown. События Cell Click запускаются 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. Такое поведение (и приведенная выше модификация), вероятно, лучше всего выполнять в пользовательском элементе управления, который наследует DataGridView.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...