关于 c#:Winforms: 将 2 个模糊的表单放在前面

Winforms: bring 2 obscured forms to front

我试图解决这个问题很长时间了。
我有两种形式,我的目标是:

  • 当用户最小化 form2 时,form1 也必须最小化。
  • 当用户最大化 form2 时,form1 也必须最大化。
  • 当两个窗体都被另一个窗口遮挡时,用户在任务栏中单击窗体 2 图标时,窗体 1 也必须出现在前面。
  • 我用 a_Resize 方法解决的前两件事。但我不能做第三个。我尝试使用激活事件,但是当我这样做时,form2 一直被阻止。
    这是我的代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
        public partial class Form1 : Form
    {
        Form2 form2;

        public Form1()
        {
            InitializeComponent();
            form2 = new Form2();
            form2.Show();
            form2.Resize += new EventHandler(a_Resize);
        }

        void a_Resize(object sender, EventArgs e)
        {
            if (((Form)sender).WindowState == FormWindowState.Minimized)
            {
                this.WindowState = FormWindowState.Minimized;
            }
            else
            {
                this.WindowState = FormWindowState.Normal;
            }
        }
    }

    如果我向 form2 激活事件添加处理程序:

    1
    form2.Activated += new EventHandler(form2_Activated);

    并调用例如 Focus 方法(我也尝试过其他方法),form2 一直被挡在 form1 后面。

    1
    2
    3
    4
    void form2_Activated(object sender, EventArgs e)
    {
       this.Focus();
    }

    有人知道我该怎么做吗?


    当您创建 form2 时,只需将 this 作为参数传递给 Show() 以表示 form1 是所有者。通过所有者链接,表单将始终一起提出(至少根据我的经验——我没有规范支持我)。

    1
    2
    3
    4
    5
    6
    7
    public Form1()
    {
        InitializeComponent();
        form2 = new Form2();
        form2.Show(this);     //pass 'this' as argument to Show() to link them
        form2.Resize += new EventHandler(a_Resize);
    }