单击按钮时,我打开一个新表单(比如说 Form2),但我不希望 Form2 打开超过 1 次。而且我不想使用 .ShowDialog(),因为它不允许我转到上一个表单。我怎样才能做到这一点 ?
问问题
130 次
6 回答
4
您可以使用Application.OpenForms属性检查表单是否已打开:
if (!Application.OpenForms.OfType<Form2>().Any())
{
Form2 form2 = new Form2();
form2.Show();
}
于 2013-03-19T14:52:58.123 回答
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;
}
于 2013-03-19T14:56:43.500 回答
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();
并且由于他们实际上无法关闭表单,因此这将始终有效。
于 2013-03-19T14:53:55.990 回答
0
你可以尝试类似的东西
bool windowIsNotOpen;
Mutex mutext = new Mutex(true, "Form2", out windowIsNotOpen);
if (!windowIsNotOpen)
{
// Form2 is already open
return;
}
于 2013-03-19T14:55:19.590 回答
0
你可以做一个静态属性来告诉你它是否打开。您将在打开表单时设置它,并在关闭表单时将其关闭。
class Form2 {
public static bool IsOpen { get;set; }
public Form2() {
Load += (sender, e) => { Form2.IsOpen = true; };
Closed += (sender, e) => { Form2.IsOpen = false; };
}
}
每当您想打开它时,请先检查标志。
于 2013-03-19T14:57:13.293 回答
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 并检查打开了哪个
于 2013-03-19T14:57:58.377 回答