另一个进程的窗口介于我的两个表单之间

时间:2017-02-22 02:38:21

标签: c# winforms z-order

我有一个.Net winforms(C#)应用程序及其主要表单(表单A),它打开不同的其他表单作为非模态(这样用户可以独立处理主表单或子表单)

在某些情况下,子表单(表单B)会打开另一个弹出表单(表单C)。当这个弹出窗口关闭时,来自另一个应用程序的另一个窗口(例如,色彩,Outlook,VS)进入我的主窗体和子窗体之间。通常这个窗口就是我主窗口下面的窗口。

在关闭表单之前,z顺序是:Outlook,表单A,表单B,表单C

关闭表单c后,z顺序更改为:表单A,Outlook,表单B

我不想特意BringToFront()我的表格A,因为在特定时间可能有很多表格B的实例,我不想在表格B上制作表格A. #39; S

知道什么可能导致这种行为吗?有没有办法确保我的所有应用程序的表单都高于其他窗口?

1 个答案:

答案 0 :(得分:1)

您可以使子窗体由打开它们的窗体所拥有。这将保持相对z次序。

public partial class FormA : Form
    {

    private void button1_Click(object sender, EventArgs e)
        {
        FormB f = new FormB();
        f.Show(this);
        }
    }
public partial class FormB : Form
    {

    private void button1_Click(object sender, EventArgs e)
        {
        FormC f = new FormC();
        f.Show(this.Owner);
        }
    }

这具有副作用,即当表单的所有者关闭/最小化时,其拥有的表单也将关闭/最小化。