C# Form.Show()未在窗体上设置焦点

C# Form.Show()未在窗体上设置焦点,c#,winforms,focus,show,C#,Winforms,Focus,Show,我搜索过,但没有找到,或者发现了,但没有任何东西对我有用,因此这个问题。下面的代码用于在我的主窗体顶部显示进度窗体。这个表单必须有焦点 代码: 表单显示,但没有焦点,请参见下图: 正如您所看到的,主窗体仍然有它的焦点,而不是新窗体。我想要的是: 我尝试过以下方法,但都不起作用: _progress.BringToFront(); _progress.Focus(); _progress.Activate(); 我也在新表单的构造函数中尝试了这些方法,但得到了相同的结果。有人知道如何解决这个

我搜索过,但没有找到,或者发现了,但没有任何东西对我有用,因此这个问题。下面的代码用于在我的主窗体顶部显示进度窗体。这个表单必须有焦点

代码: 表单显示,但没有焦点,请参见下图:

正如您所看到的,主窗体仍然有它的焦点,而不是新窗体。我想要的是:

我尝试过以下方法,但都不起作用:

_progress.BringToFront();
_progress.Focus();
_progress.Activate();
我也在新表单的构造函数中尝试了这些方法,但得到了相同的结果。有人知道如何解决这个问题吗

编辑: 我使用了“gnarlybracket”在回答中提出的解决方案,只需切换到代码行即可工作。同样重要的是,我发现了为什么
ShowProgress
没有集中精力。我从表单的
Load
事件调用了该方法。如果我从窗体的
激活事件调用它,新窗体将显示并具有焦点。

而不是

_progress.Show();
尝试:


如果您不希望人们能够单击主窗体,请尝试使用.ShowDialog(),除此之外,我无法找出.Focus()不起作用的原因。奇怪。
ShowDialog()
不是一个选项,请参阅我对“gnarlybracket”答案的评论。尝试得很好,但在我显示进度表后,我必须启动一个
BackGroundWorker
,当我使用
ShowDialog()
时,代码挂在这一行,而不是启动工作程序。你能先启动
BackGroundWorker
吗,使用后立即使用
ShowDialog()
?谢谢,这很有效。我还发现了为什么最初的
Show
不起作用。我把它作为编辑放在我的问题里。
_progress.Show();
_progress.ShowDialog();