C# 如何防止在c中多次打开窗体#

C# 如何防止在c中多次打开窗体#,c#,C#,我创建了一个应用程序,其中有一个menustrip,其中有两个按钮,一个用于添加,另一个用于更新&两个控件都在一个表单中,这意味着添加和更新的按钮在一个表单中,每当我在menustrip UPDATE按钮中按ADD按钮时,都将被禁用,当我在菜单上按update时,添加按钮将禁用。如何做到这一点?我是通过show方法实现的,但该表单使用show()打开了多次 在这种情况下,您只需使用一个表单。尝试使用单例方法- 尝试使用.ShowDialog()而不是.Show(),在该表单关闭之前,将无法单击任

我创建了一个应用程序,其中有一个menustrip,其中有两个按钮,一个用于添加,另一个用于更新&两个控件都在一个表单中,这意味着添加和更新的按钮在一个表单中,每当我在menustrip UPDATE按钮中按ADD按钮时,都将被禁用,当我在菜单上按update时,添加按钮将禁用。如何做到这一点?我是通过show方法实现的,但该表单使用show()打开了多次


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


尝试使用
.ShowDialog()
而不是
.Show()
,在该表单关闭之前,将无法单击任何其他表单。

为此,如果已创建
表单
,则需要将该
表单
的实例放在那些方法之外,或者创建并显示它(这是单例模式)。下面是一个例子:

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

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

请尝试使用其文本属性检查表单是否已打开。。如果它是打开的,只需专注于该形式,其他方面则像平常一样显示该形式

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

            }
        }

试试这个吧,很简单

你打算如何重新启用它们?因为它是一个数据库表单,我希望menustrip可以在一个表单上工作,而不需要多次打开它我不明白-如果你只需要更改已经存在的表单上按钮的属性,而你不想显示更多表单,你为什么要在这些赛事投手中制造新的投手?Rgds,你的问题很难理解。你能试着改写一下吗?我知道英语可能不是你的第一语言,但适当的大写和标点符号会使它更容易阅读。
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();

            }
        }