[英]How to completely bring to front a WinForm when activated
我有两个对话框, 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 Explorer window,FormB 是托管 WinForm,但行为相同。 如果我没有将 IWin32Window 传递给Show()
,它可以正常工作,但如果我关闭 A,B 不会关闭并且它不会响应事件(请参阅以下条目)。
如果不删除所有者属性,您将无法执行此操作。
来自文档:拥有的 forms 也永远不会显示在其所有者表单后面。
来源: http://msdn.microsoft.com/en-us/library/system.windows.forms.form.owner.aspx
对于您的具体问题,您为什么不收听 Close 事件然后明确关闭您自己的表单?
您可以将TopMost属性设置为 true。
一个技巧是在 FormB 的 OnDeactivate 方法中设置 WindowState = FormWindowState.Minimized (或覆盖它)。
protected override void OnDeactivate(EventArgs e)
{
base.OnDeactivate(e);
this.WindowState = FormWindowState.Minimized;
}
我不知道这是否是你想要的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.