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

时间:2011-06-15 15:23:38

标签: c#

我创建了一个应用程序,其中有一个menustrip,其中有2个按钮,一个用于ADD,另一个用于UPDATE&两个控件都是单一形式,意味着一个按钮添加&更新是在一个单一的形式,每当我按下menustrip更新按钮中的添加按钮将被禁用,当我按下menustrip更新时,添加按钮将禁用。这该怎么做?我通过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;

    }

4 个答案:

答案 0 :(得分:0)

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

http://hashfactor.wordpress.com/2009/03/31/c-winforms-create-a-single-instance-form/

答案 1 :(得分:0)

尝试使用.ShowDialog()而不是.Show(),并且在关闭之前不会点击任何其他表单。

答案 2 :(得分:0)

要做到这一点,你需要在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(); } 的实例,如果没有创建并显示它(这是单身模式)。这是一个例子:

{{1}}

关于禁用菜单项的一个问题,您如何计划在禁用菜单项后重新启用它们?

答案 3 :(得分:0)

尝试通过使用其文本属性来检查表单是否已经打开..如果它被打开只关注该表单其他明智的表单通常

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

            }
        }

尝试这个简单的人