удалить обработчик подпрограммы с дополнительными аргументами

Я пытаюсь удалить обработчик подпрограммы, содержащей дополнительный аргумент, но он не работает и выдает предупреждение:
«Выражение 'AddressOf' не действует в этом контексте, потому что аргумент метода для 'AddressOf 'требует упрощенного преобразования в тип делегата события. Назначьте выражение AddressOf переменной и используйте эту переменную для добавления или удаления метода в качестве обработчика.
Вот моя подпрограмма:

Private Sub ComboBox_MFC_SelectedValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs, Optional ByVal SingleCase As Int16 = -1) Handles ComboBox_MFC.SelectedValueChanged
...
End Sub

Вот мой исходный код для удаления этого обработчика:

Private Sub Me_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Me.Load
        ...
        RemoveHandler ComboBox_MFC.SelectedValueChanged, AddressOf ComboBox_MFC_SelectedValueChanged
        'TODO: This line of code loads data into the 'MyDataSet1.MFC' table. You can move, or remove it, as needed.
        Me.MFCTableAdapter.Fill(Me.MyDataSet1.MFC)
        ComboBox_MFC.DataSource = New DataView(Me.MyDataSet1.MFC, "IsPresent = True", "Name", DataViewRowState.CurrentRows)
        ComboBox_MFC.ValueMember = "Name"
        ComboBox_MFC.DisplayMember = "Name"
        ...
        AddHandler ComboBox_MFC.SelectedValueChanged, AddressOf ComboBox_MFC_SelectedValueChanged
        ...
End Sub

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

Итак, я сделал то, что рекомендовано в сообщении, и использовал переменную для присвоения выражения addressOf.
Вот что я пробовал:

Private Sub Me_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Me.Load
        ...
        Dim ComboboxesEventAddress As New EventHandler(AddressOf ComboBoxes_SelectedValueChanged)
        RemoveHandler ComboBox_MFC.SelectedValueChanged, ComboboxesEventAddress
        ...
        AddHandler ComboBox_MFC.SelectedValueChanged, ComboboxesEventAddress
End Sub

Предупреждающее сообщение исчезает, но проблема остается.
PS: Я использую Compact Framework


person KarMag    schedule 26.05.2015    source источник
comment
Похоже, у вас такая же проблема; GeeksWithBlogs   -  person WashirePie    schedule 26.05.2015
comment
Это неправильный способ реализовать настраиваемое событие. Все события должны соответствовать формату (Sender, e). Чтобы добавить аргумент, создайте новый класс, унаследованный от EventArgs, и добавьте свою переменную. В зависимости от того, что вы делаете, самому событию может потребоваться другое имя, поскольку уже существует стандартное событие cbo с другим sig.   -  person Ňɏssa Pøngjǣrdenlarp    schedule 26.05.2015
comment
Вместо SelectedValueChanged используйте событие SelectionChangesCommitted. SelectionChangesCommitted событие не срабатывает, когда вы изменяете выбранное значение программно, только когда это делает пользователь   -  person Fabio    schedule 26.05.2015


Ответы (1)


Проверьте, действительно ли вы удалили нужный обработчик. Я имею в виду, иногда люди так делают

RemoveHandler ComboBox_MFC.SelectedIndexChanged, ComboboxesEventAddress
...
AddHandler ComboBox_MFC.SelectedValueChanged, ComboboxesEventAddress

где удалить SelectedIndexChanged вместо SelectedValueChanged ;-)

person RawBean    schedule 27.05.2015