如何在激活时将WinForm完全带到前面

我有两个对话框, FormAFormB 。 我使用以下代码来显示(无模式) FormB 。 代码是从FormA执行的按钮单击。

  private void button_Click(object sender, EventArgs e) { FormB fB = new FormB(); fB.Show(this); // FormA is the owner of FormB } 

问题是,当FormB在屏幕上的FormA上时,如果我单击FormA ,它会被激活,但不会被带到前面。 实际上FormB总是在FormA上

形式

你知道为什么,以及如何更改此行为,而不删除所有者属性?

注意:这是我的问题的简化。 在真正的问题中,FormA是一个Windows资源管理器窗口,FormB是一个托管的WinForm,但行为是相同的。 如果我没有将IWin32Window传递给Show() ,它可以正常工作,但如果我关闭A,则B未关闭且它不响应事件(请参阅以下条目 )。

如果不删除所有者属性,则无法执行此操作。

来自文档:拥有的表单也不会在其所有者表单后面显示。

来源: http : //msdn.microsoft.com/en-us/library/system.windows.forms.form.owner.aspx

对于您的具体问题,您为什么不听关闭事件然后明确关闭自己的表单?

您可以将TopMost属性设置为true。

一个hack是在FormB的OnDeactivate方法中设置WindowState = FormWindowState.Minimized(orverride it)。

  protected override void OnDeactivate(EventArgs e) { base.OnDeactivate(e); this.WindowState = FormWindowState.Minimized; } 

我不知道这是不是你想要的。