Существующий обработчик "не найден" - PullRequest
0 голосов
/ 21 апреля 2020

Я создал собственный элемент управления, унаследованный от DateTimePicker для обработки «непрерывной печати».

Public Class TimePicker
    Inherits System.Windows.Forms.DateTimePicker

    Private keyPressed As Boolean = False
    Private switchPart As Boolean = True

    Public Sub New()
        MyBase.New()
    End Sub

    Private Shadows Sub KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
        switchPart = True
        If e.KeyCode >= Keys.NumPad0 AndAlso e.KeyCode <= Keys.NumPad9 Then keyPressed = True
        If e.KeyCode = Keys.Left OrElse e.KeyCode = Keys.Right Then switchPart = False
    End Sub

    Public Shadows Sub ValueChanged(sender As Object, e As System.EventArgs) Handles MyBase.ValueChanged
        ' Setup variable to store last value chosen between changes
        Static lastValue As Date = Date.FromOADate(0)
        If (Value.Hour <> lastValue.Hour OrElse Value.Minute <> lastValue.Minute) AndAlso keyPressed AndAlso switchPart Then
            SendKeys.Send("{RIGHT}")
            keyPressed = False
        End If
        lastValue = Value
    End Sub

End Class

И я был очень счастлив в течение многих лет. Но в последнее время он начал отказываться от компиляции формы, которая использует следующий код:

Private Sub dtpStartingTime_ValueChanged(sender As Object, e As EventArgs) Handles dtpStartingTime.ValueChanged
    dtpEndingTime.Value = New DateTime(Math.Max(dtpStartingTime.Value.Ticks, dtpEndingTime.Value.Ticks))
End Sub

Значение ValueChanged в дескрипторах подчеркнуто красным, а сообщение

Ошибка BC30590 Event ' ValueChanged 'не может быть найден.

Но если я нажму F12 на подчеркнутом событии, это приведет меня к функции, определенной в моем пользовательском элементе управления. Так что это определенно найдено.

Что происходит? Уже 10 раз я очищаю раствор, чтобы, конечно, удалить папку bin. Это больше не работает.

Может кто-нибудь помочь мне?

Спасибо.

PS: я использую VS2019

1 Ответ

0 голосов
/ 21 апреля 2020

Как вы думаете, что это значит:

Public Shadows Sub ValueChanged

Вы специально говорите своему классу, чтобы он скрывал члена с тем же именем в базовом классе. Скрывать событие с помощью метода просто плохо.

Это не то, как вы меняете поведение в событиях. В хорошо написанном коде каждое событие имеет соответствующий метод, который существует специально для вызова этого события. Для получения дополнительной информации читайте здесь . Вы должны переопределить соответствующие методы, например, так:

Public Class TimePicker
    Inherits DateTimePicker

    '...

    Protected Overrides Sub OnKeyDown(e As KeyEventArgs)
        'Code here is executed before any event handlers.

        MyBase.OnKeyDown(e)

        'Code here is executed after any event handlers.
    End Sub

    Protected Overrides Sub OnValueChanged(e As EventArgs)
        'Code here is executed before any event handlers.

        MyBase.OnValueChanged(e)

        'Code here is executed after any event handlers.
    End Sub

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