2014-09-21 4 views
0

У меня есть часть кода, где я добавляю обработчик каждый раз, когда форма открыта, я работаю в визуальном базовом, но при первом входе в форму все работает нормально, но во второй раз у меня есть 2 обработчика, если я вхожу в третий, у меня есть 3 обработчика и так далее. Я не знаю, почему это происходит.Не удается удалить обработчик событий, добавив несколько раз

Вот что я пробовал до сих пор.

Я хранятся все мои машины в другом классе, но я посылаю к Myform, чтобы показать им, но, чтобы добавить их я использую этот код:

Private Sub add_machine(ByRef machine As Machine) 

    RemoveHandler machine.imgBox.Click, AddressOf Me.imgBox_Click 
    AddHandler machine.imgBox.Click, AddressOf Me.imgBox_Click 
    Me.Controls.Add(machine.get_imgMachine) 

    Private Sub imgBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)   
    'Some code 
    End Sub 

Everytime я открываю форму я называю суб add_machine добавить динамически мои машины, как вы можете видеть, что я отправить их ByRef упростить мой код, который я пытался поставить эту RemoveHandler, так я посылаю ByRef, чтобы избежать более одного обработчика, но это не работает, пожалуйста, помогите

Спасибо авансовый.

+0

Передано ли 'machine' этой функции, как в предыдущем вызове? Если нет, это не сработает. Вам нужно отказаться от подписки на предыдущий экземпляр 'machine'. –

+0

Я думаю, что это одна и та же машина, потому что у меня есть кнопка, которая вызывает эту форму, моя основная форма всегда открыта, и именно там я храню машины, как бы я знал, если это не тот же экземпляр. – ocespedes

+0

Вы отметили это как VBA, но, возможно, вы имеете в виду Visual Basic? Вы взглянули на: http://msdn.microsoft.com/en-us/library/6yyk8z93(v=vs.90).aspx –

ответ

2

Две вещи, DONT пройти машину ByRef. Вы не возвращаете новый объект. Пожалуйста, прочитайте эту ссылку для получения дополнительной информации о том, как следует использовать Byval vs ByRef

Во-вторых, добавьте обработчиков во время загрузки формы (или инициализации) и удалите их при закрытии формы. Это поможет убедиться, что вы работаете со ссылками на один и тот же объект.

+0

Я так не думал, я чувствую себя настолько глупо сейчас – ocespedes

Смежные вопросы