2011-06-15 67 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(); 

      } 
     } 

試試這個傢伙其簡單