Как правильно прикрепить форму справа к MDI в приложении Windows Form? - PullRequest
0 голосов
/ 23 января 2019

Я добавляю к 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 голосов
/ 23 января 2019

Окна боковой панели не должны быть подвижными и не должны иметь изменяемого размера и не должны быть максимально развернутыми, поэтому:

  • Установите FormBorderStyle на FixedToolWindow.
  • Переопределить WndProc окна боковой панели 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();
    
0 голосов
/ 23 января 2019

Просто поместите панель в нужном режиме, где вы хотите разместить боковую панель, и отобразите боковую панель на панели.


Следующие коды позволяют отображать форму боковой панели на панели:

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