2010-09-16 65 views
2

我在應用程序中放置了MDI表單。如果我從文件菜單中選擇一個選項作爲新建,我將加載一個子表單。如何使MDI表格在子表單處於活動狀態時無效

我的代碼如下,以顯示子窗體

private void ShowNewForm(object sender, EventArgs e) 
    { 
     foreach (Form frm in Application.OpenForms) 
     { 
      if (frm.Text == "Main") 
      { 
       IsOpen = true; 
       frm.Focus(); 
       break; 
      } 
     } 
     if (IsOpen == false) 
     { 
      Form childForm = new FrmMain(); 
      childForm.MdiParent = this; 
      childForm.Show(); 
     } 
    } 

現在我需要的是當子窗體處於活動狀態,我想有我MDI沒有改變,直到並且除非用戶關閉子形成。

一般爲形式,我們會寫

 frm.showDialog() 

那麼如何解決這個

+0

我不清楚爲什麼你需要孩子的形式是MDI,當你使用它們作爲對話框的形式?爲什麼不childForm.ShowDialog()? – veljkoz 2010-09-16 10:02:48

+0

如果我使用childform.showdialog()我得到一個錯誤,因爲不是頂級窗體的窗體不能顯示爲模態對話框。在調用showDialog之前,從任何父窗體中刪除窗體。 – Dotnet 2010-09-16 10:10:01

+0

我不確定它是否可行,但我認爲你的UI設計很有趣。我沒有看到任何其他應用程序中的這種方法。 – anilca 2010-09-16 12:06:05

回答

3

給這樣

if (IsOpen == false) 
     { 

    Form childForm = new FrmMain(); 
     childForm.TopLevel=true; 
     childForm.ShowInTaskbar=false; 
     childForm.ShowDialog(); 
     } 
+0

但是如果我們將TopLevel = true,MDI從右移動到 – Dotnet 2010-09-16 11:31:08

+0

並且除非用戶關閉子窗體,那麼窗體將不會在MDI內部。但是它沒有MDI父項 – 2010-09-16 11:38:25

+0

但是在MDI中製作窗體我們不能這樣做。 – Dotnet 2010-09-16 11:40:06

2

這是關於MDI根本,子窗體不能進行模態。你使用ShowDialog()並確保你沒有設置MdiParent屬性。這樣的對話不受MDI父級邊界的限制,可以使用StartPosition屬性來使其居中。像這樣:

 using (var dlg = new Form2()) { 
      dlg.StartPosition = FormStartPosition.CenterParent; 
      if (dlg.ShowDialog(this) == DialogResult.OK) { 
       // Use dialog properties 
       //... 
      } 
     } 

當然,你不必再檢查表單是否已經存在,它是模態的。

相關問題