登录表单没有正确地失去焦点
本文关键字:失去 焦点 正确地 表单 登录 | 更新日期: 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()