2011-06-15 68 views
-4

我创建了一个应用程序,其中存在一个菜单栏,其中有2个按钮,其中一个用于添加,另一个用于更新&两个控件都是单一窗体,意味着添加&按钮的更新是在一个单一的形式,每当我按菜单栏中的添加按钮更新按钮将被禁用,当我按菜单栏更新添加按钮将禁用。这个怎么做?我通过显示方法做到这一点,但该表单使用show()多次打开。如何防止在c#中多次打开窗体

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; 

    } 
+2

你打算如何重新启用它们? – w69rdy 2011-06-15 15:26:38

+0

,因为它是一个数据库表单,我希望那个菜单条在单个表单上工作而不需要多次打开它 – Aliza 2011-06-15 15:28:27

+2

你的问题很难理解。你可以试着对它进行改写吗?我明白英语可能不是您的第一语言,但适当的大写和标点符号会使阅读更容易。 – 2011-06-15 15:31:05

回答

0

尝试使用.ShowDialog()代替.Show()并没有其他形式将能够点击,直到一个关闭。

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

但有一个问题,你是怎么打算重新启用他们,他们已被禁用后?

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

      } 
     } 

试试这个家伙其简单