Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 另一个进程的窗口位于我的两个窗体之间_C#_Winforms_Z Order - Fatal编程技术网

C# 另一个进程的窗口位于我的两个窗体之间

C# 另一个进程的窗口位于我的两个窗体之间,c#,winforms,z-order,C#,Winforms,Z Order,我有一个.Net winforms(C#)应用程序及其主窗体(窗体a),它以非模式方式打开其他不同窗体(以便用户可以独立处理主窗体或子窗体) 在某些情况下,子表单(表单B)会打开另一个弹出表单(表单C)。当此弹出窗口关闭时,另一个应用程序(如chrome、outlook、VS)的另一个窗口会出现在我的主窗体和子窗体之间。通常,另一个窗口就是我的主窗口下方的窗口 在关闭表单之前,z顺序为:Outlook、表单A、表单B、表单C 关闭表格c后,z顺序更改为:表格A、Outlook、表格B 我不想特别

我有一个.Net winforms(C#)应用程序及其主窗体(窗体a),它以非模式方式打开其他不同窗体(以便用户可以独立处理主窗体或子窗体)

在某些情况下,子表单(表单B)会打开另一个弹出表单(表单C)。当此弹出窗口关闭时,另一个应用程序(如chrome、outlook、VS)的另一个窗口会出现在我的主窗体和子窗体之间。通常,另一个窗口就是我的主窗口下方的窗口

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

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

我不想特别地将我的表单A引入到表单A中,因为在给定的时间内可能会有很多表单B的实例,我不想将表单A置于表单B之上


知道是什么导致了这种行为吗?有没有办法确保我的应用程序的所有窗体都位于其他窗口之上?

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

public partial class FormA : Form
    {

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


这样做的副作用是,当表单的所有者关闭/最小化时,其所拥有的表单也将关闭/最小化

这还有一个副作用,如果我打开另一个表单B实例,我就无法访问前一个表单B实例。我需要随时访问所有表单:(@Anuruddha,这里没有任何内容阻止您访问以前的实例。唯一需要注意的是所有者窗口(本例中为FormA)无法覆盖所有者拥有的窗口。提供了所有者拥有的窗口关系的良好摘要;它适用于WPF窗口,但该列表也适用于WinForm窗口。
public partial class FormB : Form
    {

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