如何防止在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;
    }

如何防止在c中多次打开表单

在这种情况下,您只需使用一个表单。尝试使用单例方法-

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();
            }
        }

试试这个家伙它的简单