当窗口关闭时,我的应用程序失去焦点

当窗口关闭时,我的应用程序失去焦点

问题描述:

我有一个简单的两个窗体,一个包含一个网格和一个按钮。当我点击按钮时,我的应用程序开始进行长时间的操作。虽然现在的工作,我表明,包含一个进度条 我打开它这样一种形式:当窗口关闭时,我的应用程序失去焦点

_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不会不会失去焦点)。

你知道发生了什么事或我可以在哪里搜索?

可能有两种可能的解决方案,使您保持您的重点主窗口:

//编辑:主窗口中下面的例子是与网​​格和按钮的窗口。

  1. 既然你是通过ShowDialog()试图通过这个设置窗口的所有者显示忙窗口:_busyWindow.ShowDialog(this);。我以前遇到类似的问题,这对我有用。既然你指定了busyWindow的所有者,当它关闭时,它会把焦点放回它的所有者,您的主窗口

  2. 如果上述技术不起作用(它应该,因为它为我工作),您可以尝试将主窗口的引用传递给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(); 
} 

看看它是否工作。第一个解决方案应该可行。

希望它有帮助。

谢谢&快乐开窗!

+0

谢谢!有效! – pedroruiz 2010-07-30 08:33:27

+0

好...只是为了信息。第一个解决方案还是第二个?猜猜,这是第一个! – Vaibhav 2010-07-30 08:34:44

+0

我刚发现它并不总是工作:( 第一次没有工作,第二次似乎工作,但有时它并没有 – pedroruiz 2010-07-30 09:22:48

刚设置好孩子的窗户Owner = null关闭之前