Я пытаюсь удалить обработчик подпрограммы, содержащей дополнительный аргумент, но он не работает и выдает предупреждение:
«Выражение '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
(Sender, e)
. Чтобы добавить аргумент, создайте новый класс, унаследованный отEventArgs
, и добавьте свою переменную. В зависимости от того, что вы делаете, самому событию может потребоваться другое имя, поскольку уже существует стандартное событие cbo с другим sig. - person Ňɏssa Pøngjǣrdenlarp   schedule 26.05.2015SelectedValueChanged
используйте событиеSelectionChangesCommitted
.SelectionChangesCommitted
событие не срабатывает, когда вы изменяете выбранное значение программно, только когда это делает пользователь - person Fabio   schedule 26.05.2015