2013-05-15 154 views
-2

Form1我啓用了IsMdiContainer,我添加了MenuStrip。在Form1_Load我「新」Form2和我正在0123pg到this這是Form1。我也正在最大限度地提高Form2,並且此操作運行良好。將表單添加到MDI兒童

Form2我有一個treeView在窗體的左側,並在窗體的右側我想顯示多種不同的形式與各種編輯功能,這將取決於所選的節點或級別treeView

我想創建一些不同的表單編輯數據,根據treeView的選擇,將顯示在Form2中。我似乎無法將表單添加到MdiChild中,並且我已經看到一些向表單添加表單可能會產生一些我不確定的編程問題的帖子。

我真的沒有任何代碼粘貼到這篇文章中,因爲除了Mdi父母和孩子之間的關係非常簡單之外,沒有任何東西可以工作。

在此先感謝您的幫助。

+0

包含代碼然後解釋它好多了! – Mehran

+2

在MDI內部創建MDI不會很好。將TreeView放在MDI父級上,將其停靠在左側。 –

回答

1

關於此主題有很多信息,但對於某些新開發人員來說,某些文檔可能很難理解。請按照下列步驟:

  1. 打開Visual Studio
  2. 創建一個Windows窗體應用程序
  3. 單擊您形式
  4. 轉到屬性形式
  5. 最小尺寸:1366個像素由768個像素。
  6. 啓動最大化
  7. 的重要因素是的IsMdiContainer
  8. 打開工具箱。
  9. 轉到菜單
  10. FileMenu到您形式
  11. 建立你的菜單
  12. 然後去解決方案資源管理器
  13. 右鍵點擊添加項目
  14. 添加另一個表格
  15. 我離開了我的Form2(在一個真正的程序中,不是一個好名字)。

因此,在這15個步驟中,我們擁有完成目標所需的一切。所以我們將做些什麼來完成我們的任務是:

  1. 回到我們第一形式
  2. 轉到我們FileMenu
  3. 雙擊要鏈接的菜單按鈕。

這將加載代碼視圖,內部的區域把這個:

Form2 newFrm = new Form2(); 
newFrm.MdiParent = this; 
newFrm.Show(); 

這段代碼正在做的是三個不同的東西:

  • 1號線:它實際上是調用我們的目標,在這種情況下是第二種形式。它實際上是爲我們建立我們的目標。

  • 第2行:實際上是將我們的第二個表單鏈接到我們當前的表單,這實際上將我們的第二個表單轉換爲子表單

  • 第3行:這實際上是物理顯示我們的第二種形式,當點擊按鈕時。

這就是你所需要的物理顯示形式

關於你的第二個問題,我不完全確定你試圖完成什麼。這聽起來像你試圖擁有一棵樹,然後作爲一個節點被選中表格的右側更改爲特定的上下文。

現在這不是最好的例子,但你的意思是這樣的嗎?

TreeNode node = treeView1.SelectedNode; 
     if (node.Text.Contains("XP")) 
     {     
      TextBox one = new TextBox(); 
      Panel i = new Panel(); 
      i.Dock = DockStyle.Right; 
      i.BackColor = Color.Black; 
      i.Controls.Add(one); 
      i.Show(); 
      TreeFrm.ActiveForm.Controls.Add(i);    

     } 

不知道這是你正在尋找的。很明顯,你會想要實現一個FlowLayoutPanel,使定位不是你的痛苦。 請記住一個MDI Parent,其中一個作爲MDI Parent的Child Form不會很好地工作。由於大多數情況都會默認爲MDI父窗體對接/定位。這個例子並不漂亮,但我不完全確定你的要求。

您是否試圖將其他窗體或組件停靠在同一窗體上?

+0

感謝您的回覆。如果我有一個包含4個不同級別的樹視圖,我希望最好在樹視圖的右側顯示4個不同的編輯屏幕。我用tabControl完成了這個任務。如果在我的treeView上選擇了級別2,則會顯示tabControl中的第二個選項卡。這個解決方案的問題是我不得不阻止用戶選擇一個選項卡,並且這會破壞用戶查看選項卡控件的方式。相反,我想顯示4種形式,並根據在treeView中選擇的級別將適當的表單放到前面。 – Michael

+0

@Michael我寫的代碼的子區域將適用,您將需要使用「FlowLayoutPanel」,但您可能必須在沒有'MdiChild'的情況下將整個應用程序寫入單個'Form'。由於與其對接的過程不會真正發生,因此它將停靠在父母身上。這是可能的,但這需要大量的試驗和錯誤。只需通過代碼將一個組件對接到一個子表單就可以了。希望有幫助,但。如果我有更多的想法,我會爲你發佈。 – Greg