1

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

4

1 回答 1

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;
}

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

于 2012-11-07T20:57:39.173 回答