2012-11-07 71 views
1

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

回答

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

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