adandelion

诗词在线 http:/www.chinapoesy.com


诗词在线 |唐诗|宋词|元曲|诗经|离骚|乐府|现代诗歌

博客园 首页 联系 订阅 管理
继承自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就执行到了。



posted on 2008-03-25 18:42  猪头  阅读(660)  评论(0编辑  收藏  举报

欢迎访问诗词在线http://www.chinapoesy.com   诗词在线 |唐诗|宋词|元曲|诗经|离骚|乐府|古典诗歌|现代诗歌|古典诗词|现代诗词|诗歌可以陶冶你的情操、丰富你的生活,让你更具内涵。诗词在线打造中国最好的诗词社区!

诗词在线社区

126在线阅读网 历史书籍、文学书籍、小说。。。