当窗口关闭时,我的应用程序失去焦点
我有一个简单的两个窗体,一个包含一个网格和一个按钮。当我点击按钮时,我的应用程序开始进行长时间的操作。虽然现在的工作,我表明,包含一个进度条 我打开它这样一种形式:当窗口关闭时,我的应用程序失去焦点
_busyWindow.ShowDialog();
并确定
public partial class BusyWindow : DevExpress.XtraEditors.XtraForm
{
public BusyWindow()
{
InitializeComponent();
}
private void BusyWindow_FormClosing(object sender, FormClosingEventArgs e)
{
this.Hide();
e.Cancel = true; // this cancels the close event.
}
}
当操作完成后,我躲在这样
形式if (ended)
_busyWindow.Hide();
它工作正常。问题是,当我关闭第二个表单(相同的结束代码)时,它也关闭,但我的主GUI失去了焦点。例如,如果我在应用程序后面打开Firefox,那么Firefox就会成为焦点。
这只发生在busyWindow打开时关闭第二个窗体,没有窗体关闭时(即,如果我打开窗体,关闭它而不点击按钮,那么主GUI不会不会失去焦点)。
你知道发生了什么事或我可以在哪里搜索?
可能有两种可能的解决方案,使您保持您的重点主窗口:
//编辑:主窗口中下面的例子是与网格和按钮的窗口。
既然你是通过
ShowDialog()
试图通过这个设置窗口的所有者显示忙窗口:_busyWindow.ShowDialog(this);
。我以前遇到类似的问题,这对我有用。既然你指定了busyWindow的所有者,当它关闭时,它会把焦点放回它的所有者,您的主窗口如果上述技术不起作用(它应该,因为它为我工作),您可以尝试将主窗口的引用传递给busyWindow,然后在其关闭设置的焦点主窗口。示例:
_busyWindow.MyMainWindow = this; //MyMainWindow references mainWindow of your app _busyWindow.ShowDialog();
而在busyWindow的的FormClosing如下:
private void BusyWindow_FormClosing(object sender, FormClosingEventArgs e)
{
this.Hide();
e.Cancel = true; // this cancels the close event.
MainWindow.Focus();
}
看看它是否工作。第一个解决方案应该可行。
希望它有帮助。
谢谢&快乐开窗!
刚设置好孩子的窗户Owner = null关闭之前
谢谢!有效! – pedroruiz 2010-07-30 08:33:27
好...只是为了信息。第一个解决方案还是第二个?猜猜,这是第一个! – Vaibhav 2010-07-30 08:34:44
我刚发现它并不总是工作:( 第一次没有工作,第二次似乎工作,但有时它并没有 – pedroruiz 2010-07-30 09:22:48