Datagridview.beginedit () не работает, поскольку datagridviewtextboxeditingcontrol удален

В приведенном ниже коде я просто пытаюсь создать BeginEdit(False) в DataGridView. Иногда это не удается:

System.ObjectDisposedException
  HResult=0x80131622
  Message=Cannot access a disposed object.
Object name: 'DataGridViewTextBoxEditingControl'.
  Source=System.Windows.Forms
  StackTrace:
   at System.Windows.Forms.Control.CreateHandle()
   at System.Windows.Forms.TextBoxBase.CreateHandle()
   at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
   at System.Windows.Forms.Control.CreateControl()
(...)

Я убедился, что это ячейка Текущий, то есть выбранный ... что еще я могу сделать? С помощью If, которое я добавил в тщетной попытке обойти проблему, я вижу путем отладки, что EditingControl в этот момент является Nothing, поэтому приведенный ниже код даже не работает на .EditingControl.CreateControl() (объект не создан).

Его можно легко воспроизвести: отредактируйте строку, затем нажмите Escape. Escape заставляет DataGridView удалить строку, в результате чего EditingControl становится Nothing. Любая дальнейшая попытка сделать BeginEdit приведет к вышеуказанной ошибке.

Как можно создать экземпляр EditingControl, связанный с ячейкой?

Краткое изложение кода:

    dgv.Focus()
    dgv.CurrentCell = dgv.Rows(intRowNr).Cells(intColumnNr)
    dgv.CurrentRow.Cells(intColumnNr).Selected = True
    dgv.Refresh()

    If dgv.EditingControl = Nothing OrElse dgv.EditingControl.IsDisposed Then
      ' Everything here in the If is a vain attempt to circumvent the problem.
      dgv.EditingControl.CreateControl() ' Fails because the EditingControl is sometimes Nothing
      dgv.CurrentCell.InitializeEditingControl(intRow, dgv.Rows(intRow).Cells(0).Value, dgv.DefaultCellStyle)
    End If

    dgv.BeginEdit(False) ' If the If above is not there,
    ' this occasionally fails with the error above.

Как насчет того, чтобы сообщить нам, где / когда / как выполняется этот фрагмент кода? Без контекста состояния DGV этот вопрос сводится к «Почему этот случайный код не работает?».

TnTinMn 13.09.2018 21:27

Трудно добавить весь код, так как он быстро добавит сотни строк кода и событий. Но при дальнейшей отладке я мог бы перефразировать вопрос в нечто более конкретное. Альтернативой является использование SendKeys ("{F2}"), но это менее чисто.

CeSinge 14.09.2018 20:22
0
2
119
0

Другие вопросы по теме