代码之家  ›  专栏  ›  技术社区  ›  ehh

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

  •  1
  • ehh  · 技术社区  · 5 年前

    我正在向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);
        }
    }
    

    注意:工具栏是在设计模式下添加的。

    如何正确添加侧栏窗体而不使其与工具栏重叠?

    2 回复  |  直到 5 年前
        1
  •  1
  •   Reza Aghaei    5 年前

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

    • 集合 FormBorderStyle FixedToolWindow .
    • 重写 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);
      }
      
    • 另外,添加侧栏时,请将其置于前面。这意味着第一个工具栏应停靠,然后侧栏窗口将停靠在其余区域:

      this.Controls.Add(sideBar);
      sideBar.BringToFront();
      
        2
  •  0
  •   Christoph Blüm    5 年前

    只需在designermode中放置一个面板,在该面板中显示侧面板即可。


    以下代码允许您在面板中显示侧栏窗体:

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