Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 是否可以从用户控件检测窗体鼠标单击_Vb.net_Winforms_User Controls_Mouseclick Event - Fatal编程技术网

Vb.net 是否可以从用户控件检测窗体鼠标单击

Vb.net 是否可以从用户控件检测窗体鼠标单击,vb.net,winforms,user-controls,mouseclick-event,Vb.net,Winforms,User Controls,Mouseclick Event,我已经创建了一个用户控件,希望能够检测用户何时单击表单 我已经看到了哪些是相关的,但是建议使用离开事件并不总是做我想做的事情,因为当用户单击表单时,焦点不一定会改变(我的控件可能是表单上唯一的控件,在这种情况下,焦点与我的控件保持一致) 有什么想法吗 我希望能够在用户控件中执行类似操作: Private Sub ParentForm_Click(sender As Object, e As System.EventArgs) _ Handles Me.Parent.Click End

我已经创建了一个用户控件,希望能够检测用户何时单击表单

我已经看到了哪些是相关的,但是建议使用
离开
事件并不总是做我想做的事情,因为当用户单击表单时,焦点不一定会改变(我的控件可能是表单上唯一的控件,在这种情况下,焦点与我的控件保持一致)

有什么想法吗

我希望能够在用户控件中执行类似操作:

Private Sub ParentForm_Click(sender As Object, e As System.EventArgs) _
    Handles Me.Parent.Click

End Sub

我自己想出了如何做到这一点——对于任何感兴趣的人,我正在做以下工作:

Private _parentForm As Form

Private Sub UserControl_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    _parentForm = CType(Parent, Form)
    AddHandler _parentForm.Click, AddressOf ParentForm_Click
End Sub

Private Sub ParentForm_Click(sender As Object, e As System.EventArgs)
    debug.writeline("Parent form clicked")
End Sub

我会稍微改变一下:

Private _form As Control

Private Sub UserControl_ParentChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.ParentChanged

    If _form IsNot Nothing Then
        RemoveHandler _form.Click, AddressOf ParentOnClick
    End If

    _form = Me.FindForm()

    If _form IsNot Nothing Then
        AddHandler _form.Click, AddressOf ParentOnClick
    End If

End Sub

Private Sub ParentOnClick(ByVal sender As Object, ByVal e As EventArgs)
    '...
End Sub

这给了它多一点弹性——如果它不是表单的直接子级,如果它的父级发生了变化等等。

因此,您试图找出如何在WinForms中使事件“冒泡”,即用户可以单击表单或其子控件(您的UserControl)而
点击
事件将在表单上引发?@Cody-不,我希望能够从用户控件中检测表单点击,我不认为这有什么意义。他们不会单击表单,因为用户控件位于表单顶部。如果他们在用户控件之外点击,那么为什么用户控件会得到这些信息呢?他们可以很容易地点击开始菜单。你不会期望它收到关于点击事件的通知,是吗?@Cody-如果用户点击我想要停止显示下拉列表的表单,则与我何时下拉选择的项目有关。这就是控件在触发器编辑中的行为方式(顺便说一句,当您单击“开始”菜单时,它也会卷起)