表单未作为活动窗口打开

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()

然后你应该在登录表单上添加一个检查,如果它在没有验证用户的情况下关闭它应该关闭整个应用程序,或者你可以隐藏标题栏。

【讨论】:

以上是关于表单未作为活动窗口打开的主要内容,如果未能解决你的问题,请参考以下文章

表单未在 yii 中验证和提交

按钮单击以打开新表单,如果已经有活动表单正在运行,则不要打开

MS Access 2016 - 从作为 AcDialog 打开的表单中删除标题栏

提交表单后模态弹出窗口未正确关闭

非 hubspot 表单弹出窗口未创建联系人

onclick 打开子窗口并提交表单