Vb.net 单击外部时需要关闭面板(失去焦点)

Vb.net 单击外部时需要关闭面板(失去焦点),vb.net,focus,panel,Vb.net,Focus,Panel,我有一个似乎无法克服的问题 在我的应用程序中,我有一个自定义类,它在启动时将表单加载到面板中。然后,当我单击主窗体上的按钮时,我会将面板显示为可见,向用户显示窗体 我的问题是,当用户在面板外单击(返回到主窗体)时,我希望能够隐藏面板 到目前为止,我已经尝试了Form\u Deactivate、Form\u Leave、Form\u LostFocus、Panel\u LostFocus事件,但似乎没有任何事件会始终如一地触发事件来隐藏面板。唯一有效的方法是,一旦表单可见,用户在表单内部(在lis

我有一个似乎无法克服的问题

在我的应用程序中,我有一个自定义类,它在启动时将表单加载到面板中。然后,当我单击主窗体上的按钮时,我会将面板显示为可见,向用户显示窗体

我的问题是,当用户在面板外单击(返回到主窗体)时,我希望能够隐藏面板

到目前为止,我已经尝试了
Form\u Deactivate
Form\u Leave
Form\u LostFocus
Panel\u LostFocus
事件,但似乎没有任何事件会始终如一地触发事件来隐藏面板。唯一有效的方法是,一旦表单可见,用户在表单内部(在listview控件上)单击,然后在表单外部单击

无论用户是否单击表单,我是否可以确保每次调用此事件

到目前为止,我的代码看起来像:

Public Class cls_UserObjects

    Private frm As frmUsers
    Public pnl As Panel

    Public Sub ShowUserPanel()
        Try
            frm = New frmUsers
            frm.TopLevel = False
            pnl.Controls.Add(frm)
            frm.Show()
            frm.Focus()
....
End Class
然后,在我的主窗体中,我调用下面的代码将窗体构建到面板中:

class_Users.pnl = pnlUsers
class_Users.ShowUserPanel()
pnlUsers.Visible=True
将其显示给用户

我就是关不上它。我知道面板不能正确地支持LostFocus,但是,我找不到解决这个问题的方法。也许这与我如何打开表单/面板有关,但有人建议我使用类打开表单,这样我就可以通过外部调用对表单中的控件进行更多控制


谢谢你的帮助。感谢

MouseLeave事件起作用,面板离开面板后立即隐藏

Private Sub Panel1_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles Panel1.MouseLeave
    Panel1.Visible = False
End Sub

谢谢Sabre,但我仍然需要在表单内部单击它来注册鼠标删除事件。而且,它似乎不是每次都发射,这很可能与面板中嵌入的一个窗体有关;类似这样的问题似乎会定期出现。在这种情况下,由于frmUsers或多或少是一个美化的控件,因此可以以包含该控件的形式创建并添加它。然后,您可以尝试隐藏面板作为frm.Deactivate事件的结果。