我有一个简单的两种形式,一种包含网格和一个按钮。当我单击按钮时,我的应用程序开始执行长时间操作。当它工作时,我会显示另一个包含进度条的表单 我这样打开它:
_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>
答案 0 :(得分:3)
可以有两种可能的解决方案让您专注于主窗口:
//编辑:以下示例中的主窗口将是带有网格和按钮的窗口。
由于您通过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();
}
{
this.Hide();
e.Cancel = true; // this cancels the close event.
MainWindow.Focus();
}
看看它是否有效。第一个解决方案应该有效。
希望它有所帮助。
谢谢&amp;快乐的窗口!
答案 1 :(得分:1)
在关闭之前设置子窗口Owner = null