我有一个.net winforms应用程序,其中一次显示多个表单。例如,一种形式是禁用例程(this.enabled = false;)。在此期间,表单将创建并显示自定义模式对话框。关闭对话框后,原始表单(禁用的表单)将失去焦点。我删除了将表单设置为禁用的代码,当我测试时,表单在从对话框返回后保持焦点。有没有办法让一个禁用的表单打开一个模态自定义对话框,然后在对话框关闭时保持专注并在其他表单之上?
答案 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;
}
但请注意,这通常是一个可用性问题。一旦用户切换到另一个应用程序,她就无法再次切换回您的应用程序。