当前位置: 代码迷 >> VB Dotnet >> 检测整个界面上有鼠标左键按下, 不管是在form上,仍是在其他控件上, 都能响应
  详细解决方案

检测整个界面上有鼠标左键按下, 不管是在form上,仍是在其他控件上, 都能响应

热度:169   发布时间:2016-04-25 02:21:15.0
检测整个界面上有鼠标左键按下, 不管是在form上,还是在其他控件上, 都能响应?
检测整个界面上有鼠标左键按下, 不管是在form上,还是在其他控件上,  都能响应, 用什么方法?

由于界面控件很多, 
对每一个控件进行处理那就麻烦, 
所以想监控整个form区域, 然后检测到后动作.

比如这个界面上有form 和panel,button, 
只要有鼠标左键点击, 
无论是落在form 还是panel 都能响应一个函数或事件就可

------解决方案--------------------
引用:
Quote: 引用:

看错了, 试下窗体的  Form1_MouseDown事件

        If e.Button = MouseButtons.Left Then
         .....
       End if

---------------------------------------------------------------------------
  在其他控件上的点击,Form1_MouseDown 是没有反应的,你试试看

你要把所有控件都绑定到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不支持递归。
  相关解决方案