2012-01-12 2 views
1

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

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

Любые идеи?

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

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

End Sub 
+0

Итак, вы пытаетесь выяснить, как сделать события «пузырящимися» в WinForms, то есть, чтобы пользователь мог щелкнуть или его дочернее управление (ваш UserControl), а событие 'Click' будет поднято в форме? –

+0

@Cody - Нет. Я хочу, чтобы иметь возможность обнаруживать щелчок формы в пределах элемента управления пользователя. –

+0

Я не вижу, как это может иметь смысл. Они не будут нажимать на форму, потому что пользовательский элемент управления находится поверх нее. И если они нажимают * вне * пользовательского элемента управления, то почему тогда пользователь должен контролировать информацию? Они могли бы так же легко щелкнуть по меню «Пуск». Вы не будете ожидать, что он получит уведомление о событии * click * click, не так ли? –

ответ

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 

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

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 
Смежные вопросы