我已经为它找到了一个很棒的解决方案,但它是写在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;
}
提前感谢您的帮助!
答案 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
。