如何从对话框返回时防止我的禁用winform失去焦点

时间:2012-11-07 19:48:09

标签: .net winforms

我有一个.net winforms应用程序,其中一次显示多个表单。例如,一种形式是禁用例程(this.enabled = false;)。在此期间,表单将创建并显示自定义模式对话框。关闭对话框后,原始表单(禁用的表单)将失去焦点。我删除了将表单设置为禁用的代码,当我测试时,表单在从对话框返回后保持焦点。有没有办法让一个禁用的表单打开一个模态自定义对话框,然后在对话框关闭时保持专注并在其他表单之上?

1 个答案:

答案 0 :(得分:1)

没有。 Windows管理器必须选择另一个窗口,以便在对话框关闭时提供焦点。当您的应用未启用已启用的窗口时,必须选择另一个应用程序的窗口。这可能会将您应用的窗口推向后台。

可能的解决方法是在对话框关闭之前快速启用窗口,然后再次禁用它。像这样:

using (var dlg = new Form2()) {
    dlg.FormClosing += new FormClosingEventHandler((s, ea) => {
        if (!ea.Cancel) this.Enabled = true; 
    });
    if (dlg.ShowDialog() == DialogResult.OK) {
        // etc...
    }
    this.Enabled = false;
}

但请注意,这通常是一个可用性问题。一旦用户切换到另一个应用程序,她就无法再次切换回您的应用程序。