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

时间:2010-07-30 08:01:21

标签: winforms devexpress

我有一个简单的两种形式,一种包含网格和一个按钮。当我单击按钮时,我的应用程序开始执行长时间操作。当它工作时,我会显示另一个包含进度条的表单 我这样打开它:

_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打开时关闭第二个表单,而没有打开busyWindow时(例如,如果我打开表单,我关闭它而不点击按钮,然后主GUI没有'失去焦点。)

你知道发生了什么事或我在哪里可以尝试搜索?<​​/ p>

2 个答案:

答案 0 :(得分:3)

可以有两种可能的解决方案让您专注于主窗口:

//编辑:以下示例中的主窗口将是带有网格和按钮的窗口。

  1. 由于您通过ShowDialog()显示繁忙窗口,请尝试按此设置窗口所有者:_busyWindow.ShowDialog(this);。我之前遇到过类似的问题,这对我有用。由于你指定了busyWindow的所有者,当它关闭时,它会把焦点放回到它的拥有者身上,即。你的主窗口

  2. 如果上述技术不起作用(它应该,因为它适用于我),你可以尝试将主窗口的引用传递给busyWindow,然后在其关闭设置主窗口的焦点。样品:

  3. _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();
    }
    

    { this.Hide(); e.Cancel = true; // this cancels the close event. MainWindow.Focus(); }

    看看它是否有效。第一个解决方案应该有效。

    希望它有所帮助。

    谢谢&amp;快乐的窗口!

答案 1 :(得分:1)

在关闭之前设置子窗口Owner = null