鼠标的事件比如 OnMouseClick 、OnMouseLeave、OnMouseDown等等在MSDN上有下面的注释:
This event supports the .NET Framework infrastructure and is not intended to be used directly from your code
在代码里overides了 下面的函数,调试发现事件并没有进入到相对应的方法里面来!
Protected Overrides Sub OnMouseClick(ByVal e As System.Windows.Forms.MouseEventArgs)
MyBase.OnMouseClick(e)
End Sub
MyBase.OnMouseClick(e)
End Sub
这里的OnMouseClick 没有进入执行,实际上去执行操作系统的方法了。如何才能执行这个方法而不是去执行操作系统的方法呢?
Onpaint事件如果不执行可以通过下列的方法来变相实现:
通过 Overrides Sub WndProc 可以 捕捉消息变相实现 onpaint方法
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
MyBase.WndProc(m)
If m.Msg = WM_PAINT Then
Dim g As Graphics = Graphics.FromHwnd(Handle)
DrawScrollbar(g)
g.Dispose()
End If
End Sub
MyBase.WndProc(m)
If m.Msg = WM_PAINT Then
Dim g As Graphics = Graphics.FromHwnd(Handle)
DrawScrollbar(g)
g.Dispose()
End If
End Sub
但是鼠标的丰富事件消息在这里面是同一个ID,所以无法区分是哪个鼠标事件。
后来在查看ControlStyles 的是否发现里面有 ControlStyles.UserMouse 、ControlStyles.StandardClick
做了如下设置后,鼠标事件终于进入到上面的方法离去了
Me.SetStyle(ControlStyles.UserMouse, True)
Me.SetStyle(ControlStyles.StandardClick, True)
以前提到的 OnMouseClick就执行到了。