在MdiChild和Normal之间切换子窗体?

时间:2017-12-18 17:44:08

标签: c# winforms visual-studio docking

我目前正在尝试重新创建可视工作室的停靠面板/窗体。我想将相同的系统应用于不同的项目来处理不同的窗口视图,但首先我想重新创建它。

到目前为止,我一直在MainForm和null之间切换MDiParent属性,但是无法重新创建在Visual Studio中看到的平滑过渡。它总是很笨拙,有一半时间我发现MouseUP事件我将交换机绑定到很少工作(我目前正在使用位置更改事件)。

要移动表单,我一直在使用我找到的这个方便的代码块;

 #region Form Movement

    public const int WM_NCLBUTTONDOWN = 0xA1;
    public const int HT_CAPTION = 0x2;

    [System.Runtime.InteropServices.DllImportAttribute("user32.dll")]
    public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
    [System.Runtime.InteropServices.DllImportAttribute("user32.dll")]
    public static extern bool ReleaseCapture();

    private void MoveForm()
    {
        ReleaseCapture();
        SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
    }

    #endregion

要处理Dock / UnDock,我正在使用此代码;

    private void DockToMain()
    {
        Point f = Form1.Main.PointToClient(this.Location);
        Point newP = new Point(f.X - 25, f.Y - 51);
        try { this.MdiParent = Form1.Main; } catch { }
        this.Location = newP;
    }

    private void UnDockFromMain()
    {
        Point f = Form1.Main.PointToScreen(this.Location);
        Point newP = new Point(f.X + 25, f.Y + 51);
        try { this.MdiParent = null; } catch { }
        this.Location = newP;
    }

有没有办法在Winforms中重新创建Dock Panel / Form?我是否在这里走上了正确的轨道,还是有更好的方式我没有看到?

1 个答案:

答案 0 :(得分:-1)

只是回答这个问题,意志是完全正确的。我以某种方式得到了它的工作,但是它太麻烦了,没有任何用处。只需切换到WPF(从WinForms跳转并不困难)并使用xceedsoftware" Extended WPF Toolkit"

中的Avalon dock控件