У меня очень странная проблема в приложении VB.У меня есть функция, написанная так:
В самом внутреннем состоянии, два утверждения здесь закомментированы.Было обнаружено, что они не влияют на странное поведение.Это минимальный пример, который я нашел вызывающим проблемы.
(Обратите внимание, что имена объектов были изменены в этом примере.)
Private Sub MyForm_CellValidating(ByVal sender As Object, ByVal e As DataGridViewCellValidatingEventArgs) Handles myDGV.CellValidating
Dim dgv As DataGridView = CType(sender, DataGridView)
Select Case dgv.Columns(e.ColumnIndex).Name
Case "uniqueColumn"
' Validate that the values in our unique column are unique.
For i As Integer = 0 To dgv.RowCount - 1
If i <> e.RowIndex Then
' Here i != j, so compare to the value...
If e.FormattedValue = dgv.Rows(i).Cells(e.ColumnIndex).FormattedValue Then
e.Cancel = True
'dgv.ShowRowErrors = True
'dgv.Rows(e.RowIndex).ErrorText = "Data in the unique column must be unique"
End If
End If
Next 'i
Case Else
' Perform no validation.
End Select
End Sub
Какую проблему вы спрашиваете?По какой-то необъяснимой причине, всякий раз, когда выполняется строка
e.Cancel = True
, почти все кнопки и виджеты форм во всем приложении , включая даже кнопку закрытия в его панели окна (чтопользователь будет использовать для выхода из приложения) прекратить делать то, что он делал ранее, и вместо этого теперь вызывать этот обработчик событий.
Другими словами, закомментирование этой строки (и проверка вручную при отправке формы) решает проблемы.Я хотел бы знать, почему это происходит, хотя.Некоторые указатели:
Вот список вещей, на которые не влияет:
- Кнопка свертывания и разворачивания на верхней панели.
- Все объекты в строке меню.
Этот обработчик является закрытым для своего класса формы, на него больше не ссылаются нигде в приложении.
Я в растерянности.Только как?Что может вызвать это?