This event supports the .NET Framework infrastructure and is not intended to be used directly from your code?继承自VScrollbar的自定义winform控件,某些事件不触发的问题(Winform控件开发学习)

继承自VScrollbar的自定义控件里的 onpaint 和一些鼠标事件 经过测试发现没有被触发执行,(准确的说.net 里与事件相关的方法没有被执行,而是通过操作系统去执行了其他方法)

鼠标的事件比如 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

这里的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



但是鼠标的丰富事件消息在这里面是同一个ID,所以无法区分是哪个鼠标事件。


后来在查看ControlStyles 的是否发现里面有 ControlStyles.UserMouse 、ControlStyles.StandardClick

做了如下设置后,鼠标事件终于进入到上面的方法离去了

             Me.SetStyle(ControlStyles.UserMouse, True)
             Me.SetStyle(ControlStyles.StandardClick, True)


以前提到的 OnMouseClick就执行到了。



原文地址:https://www.cnblogs.com/adandelion/p/1121793.html