检测整个界面上有鼠标左键按下, 不管是在form上,还是在其他控件上, 都能响应, 用什么方法?
由于界面控件很多,
对每一个控件进行处理那就麻烦,
所以想监控整个form区域, 然后检测到后动作.
比如这个界面上有form 和panel,button,
只要有鼠标左键点击,
无论是落在form 还是panel 都能响应一个函数或事件就可
------解决方案--------------------
你要把所有控件都绑定到MouseDown上
------解决方案--------------------
定义一个鼠标响应方法,然后在【Load】事件中遍历窗体建立响应。
Sub mouse(ByVal sender As Object, ByVal e As MouseEventArgs)
End Sub
'-------------------------------
'---------Code in Load message----------------------------
For Each c As Control In Me.Controls
AddHandler c.MouseDown, AddressOf mouse
Next
------解决方案--------------------
定义一个鼠标响应方法,然后在【Load】事件中遍历窗体建立响应。
Sub mouse(ByVal sender As Object, ByVal e As MouseEventArgs)
End Sub
'-------------------------------
'---------Code in Load message----------------------------
For Each c As Control In Me.Controls
AddHandler c.MouseDown, AddressOf mouse
Next
定义一个鼠标响应方法,手动调用,好方法学习啦!
------解决方案--------------------
11楼的方法是很不错,但亦有缺点,当容器中装有容器,希望容器中装有控件时,11楼此法则不通,有瑕疵。故此,可使用递归完成?AddHandler?,为了防止重复?AddHandler?,可在?AddHandler?之后设置控件的tag值为1.
Sub Mouse_Click(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
If e.Button = Windows.Forms.MouseButtons.Left Then
Debug.Print("0")
End If
End Sub
Sub AddMouseClickHandlerToEachControl(ByVal c As Control)
If c.Controls.Count > 0 Then
For Each n As Control In c.Controls
If n.Tag <> 1 Then
AddHandler n.MouseClick, AddressOf Mouse_Click
AddMouseClickHandlerToEachControl(n)
n.Tag = 1
End If
Next
End If
End Sub
Private Sub Form1_ControlAdded(ByVal sender As Object, ByVal e As System.Windows.Forms.ControlEventArgs) Handles Me.ControlAdded
AddMouseClickHandlerToEachControl(e.Control)
End Sub
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
AddMouseClickHandlerToEachControl(Me)
End Sub
以上方法不支持VB6,因为VB6不支持递归。