Можно ли обнаружить щелчок мышью по форме из пользовательского элемента управления? - PullRequest
1 голос
/ 12 января 2012

Я создал пользовательский элемент управления и хотел бы иметь возможность определять, когда пользователь нажимает на форму.

Я видел этот вопрос , который связан, но предложение использовать событие Leave не всегда делает то, что я хочу, потому что фокус не обязательно меняется, когда пользовательщелкает форму (мой элемент управления может быть единственным элементом формы, в этом случае фокус остается за моим элементом управления).

Любые идеи?

Я хочу сделать что-то подобное изв пользовательском контроле:

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

End Sub

Ответы [ 2 ]

3 голосов
/ 12 января 2012

Я бы сделал это немного по-другому:

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

Это придает ему немного большей устойчивости - если он не является прямым потомком формы, если меняется его родитель и т. Д.

0 голосов
/ 12 января 2012

Я понял, как это сделать сам - для всех, кто заинтересован, я делаю следующее:

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
...