表单未作为活动窗口打开
Posted
技术标签:
【中文标题】表单未作为活动窗口打开【英文标题】:Form doesn't open as the active window 【发布时间】:2018-12-06 11:27:26 【问题描述】:我的应用程序中有一个主 MDI 表单和一个登录表单。我正在像这样打开我的应用程序。我想将登录作为活动表单打开,当我的登录表单打开时,用户不应该能够单击 MDI 父表单的任何控件。 我在 MDI 表单中打开我的登录表单。
Form newLogin = new FormControllers.FrmLogin();
newLogin.StartPosition = FormStartPosition.CenterScreen;
newLogin.Show(this);
newLogin.Focus();
newLogin.TopMost = true;
newLogin.Activate();
这是我在登录表单中使用的代码:
public void activateParent()
if (this.Owner != null)
this.Owner.Enabled = true;
private void FrmLogin_Activated(object sender, EventArgs e)
if (this.Owner != null)
this.Owner.Enabled = false;
private void FrmLogin_Deactivate(object sender, EventArgs e)
activateParent();
private void FrmLogin_FormClosing(object sender, FormClosingEventArgs e)
activateParent();
当我运行程序时,登录表单仍然打开,但不是活动表单。在我运行我的程序之后,我的 MDI 表单控制器就可以被访问了。 只有当我单击登录表单时,我的 MDI 主才会禁用。我想克服这个问题。 我想打开禁用的 MDI 表单并激活登录表单。 如何做到这一点?
【问题讨论】:
使用模态表单,正如答案所暗示的那样。您可以在 MDI 表单的Shown()
事件中打开它。
【参考方案1】:
使用 ShowDialog() 代替 Show()。
例如
newLogin.ShowDialog()
然后你应该在登录表单上添加一个检查,如果它在没有验证用户的情况下关闭它应该关闭整个应用程序,或者你可以隐藏标题栏。
【讨论】:
以上是关于表单未作为活动窗口打开的主要内容,如果未能解决你的问题,请参考以下文章
按钮单击以打开新表单,如果已经有活动表单正在运行,则不要打开