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

时间:2011-08-10 09:14:30

标签: c# .net winforms

我有两个对话框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上。

Forms

您是否知道原因,以及如何在不删除所有者属性的情况下更改此行为?

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

3 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

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