Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.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#_Forms_Winforms_Applicationcontext - Fatal编程技术网

C# 同时打开两个表单

C# 同时打开两个表单,c#,forms,winforms,applicationcontext,C#,Forms,Winforms,Applicationcontext,我已经找到了一个非常棒的解决方案,但是它是为了在appstart上工作而编写的,我想通过点击按钮来完成。它可以工作,但也可以使主窗体处于活动状态,现在我可以根据需要多次打开这两个窗体。嗯,这不是我们想要的特征。当两个窗体处于活动状态时,如何锁定主窗体?还有一件事,我们添加了ESC键来关闭表单。当表单单独打开时,ESC工作,现在由于两个表单同时打开,我们可以整天按ESC,而不会做任何事情 下面是我使用的代码: public class MultiFormContext : ApplicationC

我已经找到了一个非常棒的解决方案,但是它是为了在appstart上工作而编写的,我想通过点击按钮来完成。它可以工作,但也可以使主窗体处于活动状态,现在我可以根据需要多次打开这两个窗体。嗯,这不是我们想要的特征。当两个窗体处于活动状态时,如何锁定主窗体?还有一件事,我们添加了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;
    }
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);
}

提前谢谢你的帮助

您可以尝试以下方法:

private void simpleButton1_Click(object sender, EventArgs e)
    {
        Cursor = Cursors.WaitCursor;
        using (new MultiFormContext(new fmUgyek(), new fmNaptar()))
        Cursor = Cursors.Default;
    }
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
。如果
Form2
关闭,它也将关闭
Form3