Weifenluo Dock Panel Suite: плавающие окна по размерам? - PullRequest
3 голосов
/ 17 августа 2010

Как я могу заставить плавающие окна использовать их размер дизайна (а не размер по умолчанию Dock Panel Suite) с пакетом Weifenluo Dock Panel?

Подсказка: я попробовал предложение на форумах Dock Panel Suite на SF.net, но, похоже, это не сработало.

Ответы [ 4 ]

4 голосов
/ 14 ноября 2012

Я наткнулся на этот вопрос, когда искал ответ сам, и обнаружил, что ответ Тимоти мне не подходит.

Проблема заключалась в том, что метод, который он обрисовал в общих чертах, также по умолчанию отображал окно.(возможно, это разница в версии)

Я решил это по-другому.Я создал базовый класс, который наследуется от 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;
}
3 голосов
/ 20 сентября 2012

когда 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;

    }
2 голосов
/ 01 января 2015

Это работает для меня (в VB):

Dim MyForm As New MyForm
MyForm.Show(DockPanel, New Rectangle(MyForm.Location, MyForm.Size))
MyForm.DockState = DockState.DockRight
1 голос
/ 12 июля 2011

Это сработало для меня:

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