2012-01-12 5 views
1

ユーザーコントロールを作成し、ユーザーがフォームをクリックしたときに検出できるようにしたいと考えています。ユーザーコントロールからフォームマウスを検出することは可能ですか?

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

どうすればそれが意味をなさつくかわかりません。ユーザーコントロールがその上にあるため、フォームをクリックしません。そして、ユーザーコントロールの* outside *をクリックすると、なぜユーザーコントロールがその情報を取得する必要があるのでしょうか?彼らはスタートメニューで簡単にクリックすることができます。あなたはそれが*クリックイベントの通知を受けることを期待しませんか? –

答えて

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 
関連する問題