2013-01-23 21 views
1

我在嘗試從Dock Container中刪除表單時遇到問題,一旦我使用了dockContainer.Add(form)及更高版本dockContainer.Remove(dockableFormInfo),並且當我使用form.Show()使其顯示時,它根本不會出現。表單不顯示在Show()上,因爲它正在使用(?)

查看槽的屬性,它顯示窗體實際上是visible = true,但即使使用窗體的可停靠控件已從容器中移除,我的想法是它仍然使用窗體資源,因此我無法制作它出現在控制之外。

如何讓表單顯示出來?

+1

可以顯示您當前的代碼..? – MethodMan

+0

當然,dock容器正在修改Form屬性以強制它進入容器。 TopLevel屬性的賠率很高。當設置爲false時,如果表單沒有Parent,則Show()方法不會使其可見。最好只是創建一個新的實例。 –

+0

考慮調用Form.Hide將其從Dock容器中移除後 – Dhawalk

回答

0

問題解決了,首先感謝Hans Passant提供的TopLevel提示。

從對接容器中取出後,只需將TopLevel設置爲true

下面是測試代碼:

using System; 
using System.Drawing; 
using System.Windows.Forms; 
using Crom.Controls.Docking; 

namespace DockingTester 
{ 
    public partial class Form1 : Form 
    { 
     private Form dummyForm; 
     private readonly Guid dummyFormGuid = Guid.NewGuid(); 


     public Form1() 
     { 
      InitializeComponent(); 
      CreateDummyForm(); 
      this.dummyForm.Show(); 
     } 

     private void CreateDummyForm() 
     { 
      dummyForm = new Form(); 
      this.dummyForm.Text = "Dummy docking test form"; 
     } 

     private static void DockUndockForm(DockContainer dockContainer, Form form, Guid guid) 
     { 
      DockableFormInfo formInfo = dockContainer.GetFormInfo(guid); 

      //Add 
      if (formInfo == null) 
      { 
       formInfo = dockContainer.Add(form, zAllowedDock.All, guid); 
       dockContainer.DockForm(formInfo, DockStyle.Left, zDockMode.Inner); 
      } 
      //Remove 
      else 
      { 
       Form dummy = formInfo.DockableForm; 
       dockContainer.Undock(formInfo, new Rectangle(Point.Empty, new Size(100, 300))); 
       dockContainer.Remove(formInfo); 

       dummy.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable; 
       dummy.TopLevel = true; 
      } 
     } 

     private void dockUndockButton_Click(object sender, EventArgs e) 
     { 
      if (this.dummyForm.IsDisposed) 
       CreateDummyForm(); 
      DockUndockForm(this.dockContainer1, this.dummyForm, this.dummyFormGuid); 
     } 

    } 
} 
相關問題