如何防止在c中多次打开表单
本文关键字:表单 何防止 | 更新日期: 2023-09-27 17:59:09
我创建了一个应用程序,其中有一个菜单条,其中有两个按钮,一个用于ADD,另一个用于UPDATE&两个控件都是单一的形式,这意味着添加&更新是在一个单一的表单中,每当我在菜单栏中按下添加按钮时,更新按钮将被禁用,当我在菜单条上按下更新时,添加按钮将禁用。如何做到这一点?我是用show方法来做这件事的,但那个表单是用show()打开多次的。
private void addRecordsToolStripMenuItem_Click(object sender, EventArgs e)
{
Form1 f2 = new Form1();
f2.MdiParent = this;
f2.Show();
f2.button1.Enabled = true;
}
private void updateRecordsToolStripMenuItem_Click(object sender, EventArgs e)
{
Form1 f2 = new Form1();
f2.MdiParent = this;
f2.Show();
f2.button2.Enabled = true;
f2.button1.Enabled = false;
}
在这种情况下,您只需使用一个表单。尝试使用单例方法-
http://hashfactor.wordpress.com/2009/03/31/c-winforms-create-a-single-instance-form/
尝试使用.ShowDialog()
而不是.Show()
,在该表单关闭之前,将无法单击其他表单。
要做到这一点,您需要在那些方法之外有一个Form
的实例,如果已经创建了Form
,则将其取消显示;如果还没有创建,则创建并显示(这是单例模式)。这里有一个例子:
Form1 f2 = null;
private void addRecordsToolStripMenuItem_Click(object sender, EventArgs e)
{
if (f2 == null)
{
f2 = new Form1();
f2.MdiParent = this;
f2.button1.Enabled = true;
}
f2.Show();
}
private void updateRecordsToolStripMenuItem_Click(object sender, EventArgs e)
{
if (f2 == null)
{
f2.MdiParent = this;
f2.button2.Enabled = true;
f2.button1.Enabled = false;
}
f2.Show();
}
关于禁用菜单项的一个问题是,在禁用菜单项后,您计划如何重新启用它们?
只需使用其Text属性检查表单是否已打开。。如果它被打开,只需关注该表单,其他方式显示该表单为正常
private void button1_Click(object sender, EventArgs e)
{
bool IsOpen = false;
foreach (Form f in Application.OpenForms)
{
if (f.Text == "Form1")
{
IsOpen = true;
f.Focus();
break;
}
}
if (IsOpen == false)
{
Form f1 = new Form1();
f1.Show();
}
}
试试这个家伙它的简单