Я знаю, что я на несколько лет опоздал с игрой, но вы всегда можете указать переменную класса, а затем установить ее по факту.Это не полностью закаленный способ делать вещи, но это лучше, чем просто надеяться, что у вас ничего нет, или заново добавлять его каждый раз.В моем случае я использовал это в приложении WinForms, где я хотел добавить обработчик для перетаскивания на поверхность сетки данных.Я хотел остановить эту функциональность, если часть другого представления данных еще не была заполнена полностью, от чего она зависела.
Так было бы так:
Уровень класса
Private _handlersAdded As Boolean = False
Конструктор:
Public Sub New()
AddHandler dgv.DragEnter, AddressOf DragEnter
_handlersAdded = True
End Sub
Метод, определяющий проблему:
Private Sub CheckRowsAreDone()
For Each row As DataGridViewRow In dgv.Rows
Dim num = 0
For i = 0 To row.Cells.Count - 1
Dim val = If(Not String.IsNullOrEmpty(row?.Cells(i)?.Value?.ToString), 1, -1)
num += val
Next
If num > -(row.Cells.Count) And num < (row.Cells.Count) Then
RemoveHandler dgv.DragEnter, AddressOf DragEnter
_handlersAdded = False
Exit Sub
End If
If Not _handlersAdded Then
AddHandler dgv.DragEnter, AddressOf DragEnter
_handlersAdded = True
End If
Next
End Sub