单击按钮,我打开一个新表单(比如Form2),但我不希望Form2打开超过1次。而且我不想使用.ShowDialog(),因为它不允许我转到上一个表单。我怎么能这样做?
答案 0 :(得分:4)
您可以使用Application.OpenForms属性检查表单是否已打开:
if (!Application.OpenForms.OfType<Form2>().Any())
{
Form2 form2 = new Form2();
form2.Show();
}
答案 1 :(得分:2)
您可以显示现有表单而不是创建新表单:
Form2 _form2 = null;
void Button1_Click(object sender, EventArgs e)
{
if (_form2 == null)
{
_form2 = new Form2();
_form2.Closed += Form2_Closed;
}
_form2.Show();
_form2.BringToFront();
}
private void Form2_Closed(object sender, System.EventArgs e)
{
_form2 = null;
}
答案 2 :(得分:0)
您可以发出Show
方法,该方法会显示表单并允许用户返回表单,但您还可以覆盖表单的OnClosing
事件:
protected override void OnClosing(CancelEventArgs e)
{
e.Cancel = true;
}
这将使用户无法逐字地关闭表单。最后,如果您愿意,可以在用户关闭表单时Hide
表单:
protected override void OnClosing(CancelEventArgs e)
{
e.Cancel = true;
this.Hide();
}
然后你需要在第一个表单中保留该实例,以便在单击按钮时可以重新显示它。因此,在第一种形式中,您可能会有一个类字段:
private Form2 _form2 = new Form2();
然后在按钮单击中它将如下所示:
_form2.Show();
因为它们实际上无法关闭表单,所以它总能正常工作。
答案 3 :(得分:0)
您可以尝试类似
的内容bool windowIsNotOpen;
Mutex mutext = new Mutex(true, "Form2", out windowIsNotOpen);
if (!windowIsNotOpen)
{
// Form2 is already open
return;
}
答案 4 :(得分:0)
你可以做一个静态属性,告诉你它是否打开。您在打开表单时设置它,并在表单关闭时将其关闭。
class Form2 {
public static bool IsOpen { get;set; }
public Form2() {
Load += (sender, e) => { Form2.IsOpen = true; };
Closed += (sender, e) => { Form2.IsOpen = false; };
}
}
每当你想打开它时,首先检查标志。
答案 5 :(得分:0)
Form2 f;
bool isOpen = false;
private void button1_Click(object sender, EventArgs e)
{
if (f == null)
{
f = new Form2(); ;
f.FormClosed += new FormClosedEventHandler(f_FormClosed);
}
if (!isOpen)
{
isOpen = true;
f.Show();
}
}
void f_FormClosed(object sender, FormClosedEventArgs e)
{
isOpen = false;
}
尝试此操作或使用Application.OpenForms并检查打开哪个