Отслеживание обработчика событий - PullRequest
1 голос
/ 04 мая 2011

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

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

Возможно ли это, и если да, то как мне это сделать?

(Это .NET 3.5) Спасибо!

Редактировать: Вот как выглядит код (не может опубликовать фактический код):

Public Class BaseForm
    Inherits System.Windows.Forms.UserControl

(Windows Form Designer Generated Code)

    Private WithEvents myControl As New SomeOtherControl
    Protected value As String

    Private Sub myControl_ValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles myControl.ValueChanged
        value = SomeLogic()
    End Sub
End Class  


Public Class DerivedForm
    Inherits BaseForm

    Private WithEvents myControl As New SomeOtherControl

    Private Sub myControl_ValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles myControl.ValueChanged
        value = myControl.Value
    End Sub
End Class

Ответы [ 2 ]

0 голосов
/ 04 мая 2011

Вы можете прикрепить несколько обработчиков к одному событию, поэтому вы видите, что вы видите (у вас есть два обработчика, прикрепленных к одному и тому же событию, поэтому они оба запускаются).

Как говорится, есть способы достичь того, что вы пытаетесь сделать.Один из способов - переместить код из обработчика базового класса в переопределяемый метод, а затем переопределить метод в производном классе.Таким образом, ваш обработчик базового класса имеет только 1 строку кода, вызывая новый метод, который вы сделали.Если вы наследуете от класса, он будет вызывать ваш переопределенный метод.

Public Class BaseForm
    Private Sub myControl_ValueChanged() Handles myControl.ValueChanged
        DoSomeLogic()
    End Sub
    Protected Overridable Sub DoSomeLogic()
    'original logic here
    End Sub
End Class  

Public Class ChildForm
    Inherits BaseForm
    Protected Overrides Sub DoSomeLogic()
    'other logic here
    End Sub

End Class
0 голосов
/ 04 мая 2011

Я не верю, что вы можете это контролировать.

Если бы это был я, я думаю, что я бы перехватил событие в базовом классе, как вы делаете, затем определите ДРУГОЕ событие из базового класса и вызовите это событие ОТ обработчика события в базовом классе.

при возврате, если событие было обработано (предположительно вашим производным классом), просто выйдите из обработчика базовых событий, в противном случае продолжите обработку базовых событий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...