1

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

我已经看到了这个相关的问题,但是使用该Leave事件的建议并不总是符合我的要求,因为当用户单击表单时焦点不一定会改变(我的控件可能是表单中的唯一控件哪种情况的焦点由我控制)。

有任何想法吗?

我希望能够从用户控件中做这样的事情:

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

End Sub
4

2 回答 2

3

我会做的略有不同:

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

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

于 2012-01-12T11:45:52.967 回答
0

我自己想出了如何做到这一点 - 对于任何有兴趣的人,我正在做以下事情:

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
于 2012-01-12T11:28:40.307 回答