如何在激活时将WinForm完全带到前面
我有两个对话框, FormA
和FormB
。 我使用以下代码来显示(无模式) 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; }
我不知道这是不是你想要的。