DataGridView.Editmode = EditOnEnter. Как выбрать строку Удалить это?

4

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

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

Знаешь ли ты трюк?

Теги:
datagridview

4 ответа

7
Лучший ответ

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

Когда Cell Click:

  • if index = -1 EndEdit и EditMode = DataGridViewEditMode.EditOnKeystrokeOrF2
  • Else Если 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
  • 0
    Это было действительно полезно, я объединил это с событием CellPreviewKeyDown, позволяющим выйти из режима редактирования ячейки нажатием клавиши ESC
1

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

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

  • 0
    Я знаю все другие способы. Пользователи хотят режим Excel, как. Я использую EditOnEnter только на часто используемых DGV. Я знаю, как удалить строку, но проинструктировать каждого пользователя об этом поведении .... Клавиша Esc может отменить редактирование, но в этом режиме повторно войти в режим редактирования. Я не понимаю, почему при выборе RowSelector не завершается режим редактирования. Решением является перемещение курсора в недоступную для редактирования ячейку.
0

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

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

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

    if (SelectedCells.Count > 1)
    {
        // leave edit mode
        Parent?.Focus();
    }
}
0

Это действительно нужно сделать на 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.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню