将form2从停用的form1带到前面

本文关键字:form1 前面 form2 | 更新日期: 2023-09-27 18:11:03

我有一个form1,打开form2作为"假弹出窗口"

this.enabled = false;
MyForm2 myform2 = new MyForm2();
myform2.Show();
myform2.BringToFront();

当我删除form2时,我将启用form1。

现在,如果用户最小化两个表单,然后单击form1, form1将弹出其禁用状态。我需要弹出form2。

所以我创建了一个静态类来保存我的最后一个活动表单。加载form2(或任何其他形式)我保存我的最后一个活动的形式。
protected override void OnLoad(System.EventArgs e)
{
   base.OnLoad(e);
   MyStaticClass.lastForm = this;
}

在form1(和其他类似的形式)中,我使用:

    protected override void OnGotFocus(System.EventArgs e)
    {
        base.OnGotFocus(e);
        if (!this.Enabled && MyStaticClass.lastForm!= null && MyStaticClass.lastForm != this)
        {
           MyStaticClass.lastForm.Show();
            MyStaticClass.lastForm.BringToFront();
            MyStaticClass.lastForm.Activate();
        }
    } 

OnGotFocus被执行,我的show/activate等也执行,但form2从未弹出。我做错了什么?

谢谢你,gg

将form2从停用的form1带到前面

您正在"显示"answers"激活"您的表单,问题是它仍然最小化。修改窗口状态为Normal

MyStaticClass.lastForm.WindowState = FormWindowState.Normal;

我认为用户点击一个窗口的任务栏按钮就会得到另一个窗口的任务栏按钮,这会让用户感到困惑。

在form1中调用ShowDialog()而不是Show()来代替这个繁琐的过程;这将阻止对Form1的所有访问,直到Form2关闭。ShowDialog也有一个接受"父"或"所有者"表单的重载;如果使用此重载(仅通过this),对话框将始终显示在Form1的前面。