繁体   English   中英

激活时如何将WinForm完全置于前面

[英]How to completely bring to front a WinForm when activated

我有两个对话框, 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 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM