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