2010-08-17 29 views

回答

1

這爲我工作:

var topLeft = dockPanel1.Location; 
topLeft.X += (dockPanel1.Size.Width/2 - newForm.Size.Width/2); 
topLeft.Y += (dockPanel1.Size.Height/2 - newForm.Size.Height/2); 
newForm.Show(dockPanel1, new Rectangle(topLeft, newForm.Size)); 
3

時的CForm從DockContent, 衍生我有我的MDIContainerWindow內的方法,它看起來像這樣

public void ShowForm(CForm pForm) 
    { 
     pForm.MdiParent = this; 

     Size lS = pForm.Size; 
     dockPanel.DefaultFloatWindowSize = lS; 

     pForm.Show(dockPanel); 
     pForm.VisibleState = DockState.Float; 

    } 
3

尋找,當我遇到這個問題絆倒我自己的答案,並發現蒂莫西的答案不適合我。

問題是,他概述的方法也默認浮動窗口。 (也許這是一個版本的差異)

我已經解決了另一種方式。我創建了一個從DockContent繼承的基類,即我的所有文檔窗口都將繼承它。然後,我爲Show方法創建了另一個重載處理(我使用DockPanelSuite源代碼來幫助構建此方法)。

public void Show(DockPanel dockPanel, DockState dockState, Rectangle floatWindowBounds) 
{ 
    Show(dockPanel, dockState); //shows the panel like normal 

    //now for the part to initialize the float pane and size 
    if (DockHandler.FloatPane == null) 
    { 
     DockHandler.FloatPane = dockPanel.DockPaneFactory.CreateDockPane(this, DockState.Float, false); 
     DockHandler.FloatPane.FloatWindow.StartPosition = System.Windows.Forms.FormStartPosition.Manual; 
    } 
    DockHandler.FloatPane.FloatWindow.Bounds = floatWindowBounds; 
} 
1

這是爲我工作(在VB):

Dim MyForm As New MyForm 
MyForm.Show(DockPanel, New Rectangle(MyForm.Location, MyForm.Size)) 
MyForm.DockState = DockState.DockRight 
+0

這在C#中爲我工作,以及 – TheColonel26 2015-04-03 17:01:45