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

.net 如何防止禁用的winform在从对话框返回时失去焦点,.net,winforms,.net,Winforms,我有一个.net winforms应用程序,其中一次显示多个表单。一个表单被routinley禁用(this.enabled=false;)。在此期间,表单创建并显示自定义模式对话框。当对话框关闭时,被禁用的原始窗体将失去焦点。我删除了将表单设置为禁用的代码,当我测试该代码时,表单在从对话框返回后保持焦点。有没有办法让一个被禁用的表单打开一个模式自定义对话框,然后在对话框关闭时保持焦点和其他表单的顶部 否。当对话框关闭时,Windows管理器必须选择另一个窗口作为焦点。当您的应用程序没有剩余的已

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

否。当对话框关闭时,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;
}

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

否。当对话框关闭时,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;
}
但请注意,这通常是一个可用性问题。一旦用户切换到另一个应用程序,她就不能再切换回您的应用程序