将form2从停用的form1带到前面1

时间:2011-10-11 19:51:38

标签: c# winforms

我有一个form1打开form2作为“假弹出窗口”

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

当我处理form2时,我启用了form1。

现在,如果用户最小化两种形式,然后单击form1,则form1将以其禁用状态弹出。 我需要弹出form2 insted。

所以我创建了一个静态类来保存我最后一个活动表单。在加载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

2 个答案:

答案 0 :(得分:1)

您正在“显示”并“激活”您的表单,问题是它仍然是最小化的。将WindowState更改为Normal。

MyStaticClass.lastForm.WindowState = FormWindowState.Normal;

答案 1 :(得分:1)

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

尝试在form1中调用ShowDialog()而不是Show(),而不是通过这个rigamarole;这将阻止对Form1的所有访问,直到Form2关闭。 ShowDialog也有一个接受“父”或“所有者”形式的重载;如果使用此重载(只传递this),对话框将始终显示在Form1前面。