现有处理程序是 "not found"
Existing handler is "not found"
我创建了一个自定义控件,继承自 DateTimePicker 以处理 "continuous typing"。
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
Handles 部分的 ValueChanged 有红色下划线,消息是
找不到错误 BC30590 事件 'ValueChanged'。
但是如果我在带下划线的事件上单击 F12,它会将我带到自定义控件中定义的函数。所以肯定是找到了。
这是怎么回事?我已经清理了 10 次溶液,确保删除了 bin 文件夹。它不再起作用了。
有人可以帮我吗?
谢谢。
P.S.: 我用的是VS2019
你认为这意味着什么:
Public Shadows Sub ValueChanged
您是专门告诉您的 class 隐藏数据库 class 中同名的成员。用方法隐藏事件是很糟糕的。
这不是您改变事件行为的方式。在编写良好的代码中,每个事件都有一个专门用于引发该事件的相应方法。如需更多信息,read here。您应该像这样覆盖适当的方法:
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
我创建了一个自定义控件,继承自 DateTimePicker 以处理 "continuous typing"。
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
Handles 部分的 ValueChanged 有红色下划线,消息是
找不到错误 BC30590 事件 'ValueChanged'。
但是如果我在带下划线的事件上单击 F12,它会将我带到自定义控件中定义的函数。所以肯定是找到了。
这是怎么回事?我已经清理了 10 次溶液,确保删除了 bin 文件夹。它不再起作用了。
有人可以帮我吗?
谢谢。
P.S.: 我用的是VS2019
你认为这意味着什么:
Public Shadows Sub ValueChanged
您是专门告诉您的 class 隐藏数据库 class 中同名的成员。用方法隐藏事件是很糟糕的。
这不是您改变事件行为的方式。在编写良好的代码中,每个事件都有一个专门用于引发该事件的相应方法。如需更多信息,read here。您应该像这样覆盖适当的方法:
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