2013-01-23 3 views
1

dockContainer.Add(form) 이상 dockContainer.Remove(dockableFormInfo)을 사용하고 form.Show()을 사용하여 표시 할 때이 Dock Container에서 양식을 삭제하는 데 문제가 있습니다. 그것은 전혀 나타나지 않을 것이다.표시가 보이지 않습니다 (사용 중임)

물결표를 보면 폼이 실제로 visible = true 인 것을 알 수 있습니다. 그러나 폼을 사용하는 도킹 가능한 컨트롤이 컨테이너에서 제거 되었더라도 폼 리소스를 여전히 사용하고 있으므로 만들 수 없습니다. 컨트롤 외부에 나타납니다.

양식을 표시하려면 어떻게해야합니까?

+1

당신이 당신의 현재 코드를 표시 할 수 있습니다 ..? – MethodMan

+0

도크 컨테이너가 Form 속성을 사용하여 컨테이너 안으로 밀어 넣는 것은 확실합니다. TopLevel 속성에 대한 확률이 높습니다. false로 설정하면 폼에 부모가없는 경우 Show() 메소드가 표시되지 않습니다. 새 인스턴스를 만드는 것이 가장 좋습니다. –

+0

Dock 컨테이너에서 Form.Hide를 제거한 후 호출하는 것이 좋습니다. – Dhawalk

답변

0

문제가 해결되었습니다. TopLevel 팁의 Hans Passant에게 감사드립니다.

도킹 컨테이너에서 제거한 후 TopLevel을으로 설정하면됩니다. 여기

는 테스트 코드입니다 :

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

    } 
} 
관련 문제