欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

vb.net设计时鼠标交互

程序员文章站 2022-05-29 15:20:06
...

自定义控件,很多人都知道,但是自定义控件的鼠标交互却很少人说。我一直想做一个类似tabcontrol这样的鼠标交互,但是百度通篇难以找到答案,于是查阅了微软源码,微软用的正是controldesigner这个类里的几个重写方法。想来也没写过博客,第一篇就试试写一个这个自己摸索出来的功能吧。
编译环境:VS2010
1.继承controldeisgner,先引用
System.Windows.Forms.Design,如果没有就去添加引用里添加system.design.dll


Public Class MyDesigner
 Inherits ControlDesigner
'接下来用这个类的名称来讲解
End Class

2.重写鼠标交互的方法
比如

Protected Overrides Sub OnMouseEnter()        
 MyBase.OnMouseEnter() 
 '此处响应鼠标进入事件
End Sub

但是这不是重点,因为在重写的时候我发现,没有内置的鼠标单击事件。所幸的是有一个这个函数

'鼠标处理函数
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
'下面可进行设计时鼠标消息的拦截

        Select Case m.Msg
            Case Is = WM_LBUTTONDOWN '拦截鼠标按下左键时
         '此处可添加自定义的鼠标交互方法,或者触发事件。。
            Case Is = WM_LBUTTONUP '拦截鼠标释放左键时
            
           
                '
        End Select
        
        MyBase.WndProc(m)
    End Sub

通过以上的重写,你可以把自己想达到的效果放进去测试一下。不建议用messagebox进行测试,避免阻塞vs.异步弹出或者自建单例窗体弹出都可以。
3.设计时界面的绘制
一般的,默认的设计时界面绘制是我们在自定义控件里的绘制界面,但是我们可以通过重写OnPaintAdornments这个方法进行设计时界面的绘制。

 Protected Overrides Sub OnPaintAdornments(pe As System.Windows.Forms.PaintEventArgs)
 mybase.OnPaintAdornments
 '里面添加设计时界面的代码。
 
 End sub

之所以要用这个的原因是,分离开设计时和运行时的界面,这样在鼠标交互时,并不影响到源控件的属性。简单的说就是,自定义设计器的话,设计时的界面要自己绘制,更好配合鼠标控制得到相关的效果。绘制方法和自定义控件绘制类似,只是在不同的地方绘制。
重写功能完成后,就可以将这个自定义设计器应用到自定义控件上了。
假设有类MyUserControl

<Designer(GetType(MyDesigner))>
Public Class MyUserControl
Inherits UserControl
End Class

在头上打上这个特性标记即可应用自定义的设计器

附上我自定义控件按钮组做出来的效果吧
vb.net设计时鼠标交互仅演示功能,不要太在意外观

小弟水平有限,是个菜鸡,美工也不好,也是第一次写博客,希望能有用,路过的各位大佬勿喷哈。

相关标签: 自定义控件