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-如果用户点击我想要停止显示下拉列表的表单,则与我何时下拉选择的项目有关。这就是控件在触发器编辑中的行为方式(顺便说一句,当您单击“开始”菜单时,它也会卷起)