同时打开两个表单

时间:2017-06-23 13:27:33

标签: c# forms winforms applicationcontext

我已经为它找到了一个很棒的解决方案,但它是写在app start上的,我想在点击按钮时这样做。它可以工作,但也可以激活主窗体,现在我可以根据需要多次打开2个窗体。嗯,这不是一个理想的功能。当两个表格处于活动状态时,如何锁定主表单?另外,我们添加了ESC键来关闭表单。当表格单独打开时,ESC工作,现在两者同时打开,我们可以整天按ESC,不会做任何事情。

以下是我使用的代码:

public class MultiFormContext : ApplicationContext
{
    private int openForms;
    public MultiFormContext(params Form[] forms)
    {
        openForms = forms.Length;

        foreach (var form in forms)
        {
            form.FormClosed += (s, args) =>
            {
                //When we have closed the last of the "starting" forms, 
                //end the program.
                if (Interlocked.Decrement(ref openForms) == 0)
                    ExitThread();
            };

            form.Show();
        }
    }
}

我从主窗体创建了两个窗体:

private void simpleButton1_Click(object sender, EventArgs e)
    {
        Cursor = Cursors.WaitCursor;
        using (new MultiFormContext(new fmUgyek(), new fmNaptar()))
        Cursor = Cursors.Default;
    }

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您可以尝试这样的事情:

private void button1_Click(object sender, EventArgs e)
{
    Form2 frm2 = new Form2();
    Form3 frm3 = null;

    frm2.Shown += (s, args) =>
    {
        frm3 = new Form3();
        frm3.Show();
    };

    frm2.FormClosing += (s, args) =>
    {
        frm3.Close();
    };

    frm2.ShowDialog(this);
}

Form2使用ShowDialog显示,这会阻止Form1被选中。显示Form2时,会在Form3事件中显示Shown。如果Form2已关闭,它也会关闭Form3