【问题标题】:How to properly dock to the right a form to a MDI in a Windows Form application?如何将窗体正确停靠到 Windows 窗体应用程序中的 MDI?
【发布时间】:2019-06-17 03:14:27
【问题描述】:

我正在向 MDI 添加一个侧栏表单(不是子表单)并将其停靠在右侧。 侧边栏的顶部似乎与工具栏重叠。进行手动调整大小(通过拖动)时,侧边栏“神奇地”看起来不错。

调整大小之前:

调整大小后:

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 是在设计模式下添加的。

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

【问题讨论】:

    标签: c# winforms layout mdi


    【解决方案1】:

    侧边栏窗口不应该是可移动的,不应该是可调整大小的,也不应该是可最大化的,所以:

    • FormBorderStyle 设置为FixedToolWindow
    • 覆盖侧边栏窗口WndProcWndProc以防止移动并防止最大化:

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

    【讨论】:

    • 哇,谢谢你的开放态度。我不知道我将如何阻止它移动。谢谢
    • 不客气 :) 对于这样的多窗口 UI,我宁愿不使用 MDI。相反,创建一个多选项卡 UI。每个子窗体将作为无边框子窗体添加到新选项卡中,您可以显示close button on tab。侧边栏也是一种位于右侧停靠面板中的表单。您还可以在侧面板和 tabcontrol 之间使用拆分器来调整侧边栏的大小。
    【解决方案2】:

    只需将一个面板置于设计模式中您想要拥有侧面板的位置并在面板中显示侧面板。


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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-15
      • 2016-03-18
      • 1970-01-01
      • 1970-01-01
      • 2011-03-13
      • 2013-04-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多