【问题标题】:Weifenluo Dock Panel Suite: Float windows using their design size?Weifenluo Dock Panel Suite:浮窗使用它们的设计尺寸?
【发布时间】:2010-08-17 13:15:58
【问题描述】:

如何使浮动窗口使用它们的设计尺寸(而不是 Dock Panel Suite 的默认尺寸)和 Weifenluo Dock Panel 套件?

提示:我尝试了来自 SF.net 的 Dock Panel Suite 论坛的提议,但这似乎不起作用。

【问题讨论】:

    标签: c# visual-studio-2010 dockpanel-suite


    【解决方案1】:

    我自己在寻找答案时偶然发现了这个问题,发现蒂莫西的答案对我不起作用。

    问题在于他概述的方法默认情况下也会浮动窗口。 (可能是版本不同)

    我用另一种方式解决了这个问题。我创建了一个从 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;
    }
    

    【讨论】:

    • Chris 的解决方案适用于我目前最新的 v3.0.2 版本(可通过 NuGet 获得的版本),并进行了以下小的修改:DockHandler.FloatPane = dockPanel.Theme.Extender.DockPaneFactory .CreateDockPane(this, DockState.Float, false);
    【解决方案2】:

    当 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】:

      这对我有用(在 VB 中):

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

      【讨论】:

        【解决方案4】:

        这对我有用:

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

        【讨论】:

          猜你喜欢
          • 2012-01-30
          • 1970-01-01
          • 2012-09-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-04-12
          相关资源
          最近更新 更多