登录表单没有正确地失去焦点

本文关键字:失去 焦点 正确地 表单 登录 | 更新日期: 2023-09-27 18:15:16

我有一个系统,其中主要形式是菜单,它弹出一个登录表单加载。最初它在菜单下面加载了登录表单,所以我使用了这个。Topmost =真,使它来到前面。(因为带到前面和送到后面都不起作用)

然而,如果用户随后点击其他东西,比如chrome,那么它仍然停留在z轴顺序的顶部,根据定义。

我尝试使用deactivate事件,但这意味着加载时它再次出现在菜单表单后面。

我怎样才能阻止它在我的菜单表单后面加载,但当它失去焦点时,阻止它在最上面?

private void login_Deactivate(object sender, EventArgs e)
{
     // do not want it to remain top most when the application is not in focus.
     this.TopMost = false;
}

在菜单表单中:

private void Menu_Load(object sender, EventArgs e)
{
     openLogin()
}
private void openLogin()
{
     Cursor.Current = Cursors.WaitCursor;
     login theForm = new login(this);            
     this.Enabled = false;            
     theForm.Show();
     Cursor.Current = Cursors.Default;
     theForm.Activate(); 
     theForm.TopMost = true; // Make the login form display over the Menu    
}          

登录表单没有正确地失去焦点

尝试将Login的Form Owner属性设置为菜单表单。

从以上MSDN链接:

当一个表单为另一个表单所拥有时,它将被关闭或隐藏业主表格. ...拥有的表单也永远不会显示在它们的后面主人形式。您可以对诸如find和更换窗口,不应消失时,业主形式是选中。要确定父窗体拥有的窗体,请使用OwnedForms属性

.

假设这是一个Win Forms应用程序,那么尝试将theForm.Show()更改为theForm.ShowModal()