如何在Windows窗体应用程序中正确地将窗体停靠到MDI的窗体?

时间:2019-01-23 13:49:48

标签: c# winforms layout mdi

我要在MDI上添加一个侧边栏形式(不是孩子)并将其停靠在右侧。 侧栏的顶部似乎与工具栏重叠。手动调整大小(通过拖动)时,侧栏看起来“神奇”。

调整大小之前:

enter image description here

调整大小后:

enter image description here

public partial class MDI : Form
{
    private void InitGenealogicalTree()
    {
        var form = new GenealogicalTreeForm();            
        form.TopLevel = false;
        form.WindowState = FormWindowState.Normal;
        form.Dock = DockStyle.Right;
        this.Controls.Add(form);
    }
}

注意:ToolStrip是在设计模式下添加的。

如何在不与工具栏重叠的情况下正确添加侧栏表单?

2 个答案:

答案 0 :(得分:1)

侧边栏窗口不能移动,不能调整大小,也不能最大化,因此:

  • FormBorderStyle设置为FixedToolWindow
  • 覆盖侧边栏窗口WndProc的{​​{1}},以防止移动并阻止最大化:

    WndProc
  • 此外,在添加侧栏时,请将其置于最前面。这意味着应该先停靠工具栏,然后将侧边栏窗口停靠在其余区域:

    protected override void WndProc(ref Message m)
    {
        const int WM_SYSCOMMAND = 0x0112;
        const int SC_MOVE = 0xf010;
        const int SC_MAXIMIZE = 0xf030;
        if (m.Msg == WM_SYSCOMMAND)
        {
            int command = m.WParam.ToInt32() & 0xfff0;
            if (command == SC_MOVE || command == SC_MAXIMIZE)
                return;
        }
        base.WndProc(ref m);
    }
    

答案 1 :(得分:0)

只需将面板置于desigener模式,您要在其中具有侧面板并在面板中显示侧面板。


以下代码可让您在面板中显示侧栏形式:

var form = new GenealogicalTreeForm();            
form.TopLevel = false;
panel.Controls.Add(form);
form.Dock = DockStyle.Fill;
this.Controls.Add(form);
form.Show();